发表于: 2021-07-03 20:59:29
0 1587
今天完成的事情:任务需要添加双向绑定的都添加上了;封装http请求 ; 前端 FormData
明天计划的事情:angular 任务搞完,进行封装;;微信小程序了解学习。JS 知识巩固 继续
遇到的问题:angular任务中有一部分使用接口出现问题,添加的外部组件:日历组件,富文本不能实现双向绑定,导致上传失败。。。
收获:
封装http请求:由于Angular的依赖注入机制,是不能通过直接修改 http 模块暴露的变量来进行封装。但通过官方文档了解到 ,可以通过拦截器(HttpInterceptor)来实现这一功能。
拦截器可以拦截请求,也可以拦截响应,那么通过拦截请求就可以实现 设置 baseurl ,公共头部 ;而通过拦截响应就可以实现 集中捕获错误 。
导入 HttpClientModule:在app.module.ts中导入 HttpClientModule,然后在imports数组中将 HttpClientModule 加入到 BrowserModule 之后,代码:
在app文件夹下新建http-interceptors文件夹,在其内新建base-interceptor.ts,index.ts两个文件。其中,base-interceptor.ts是用于设置拦截器的注入器文件,index.ts则为扩展拦截器的提供商。
在app.module.ts中加入: httpInterceptorProviders
将baseurl提取为全局变量,在index.html中进行设置:
// 在 index.html 增加
<script>
window.baseurl = " http:// 访问地址 "
</script>
// 在咱们创建的 base-interceptor.ts 文件中修改修改
const baseurl = window.baseurl;
FormData :
2. 构造函数:
假如现在页面已经有一个表单:
<form id="myForm" action="" method="post">
<input type="text" name="name">名字
<input type="password" name="psw">密码
<input type="submit" value="提交">
</form>
// 获取页面已有的一个 form 表单
var form = document.getElementById("myForm");// 用表单来初始化
var formData = new FormData(form);// 我们可以根据 name 来访问表单中的字段
var name = formData.get("name"); // 获取名字
var psw = formData.get("psw"); // 获取密码
// 当然也可以在此基础上,添加其他数据 formData.append("token","kshdfiwi3rh");
3. 操作方法:
key | value |
k1 | [v1,v2,v3] |
k2 | v4 |
formData.get("name"); // 获取key为name的第一个值
formData.get("name"); // 返回一个数组,获取key为name的所有值
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k1", "v1");
formData.get("k1"); // "v1";
formData.getAll("k1"); // ["v1","v2","v1"]
formData.append("k1", "v1");
formData.set("k1", "1");
formData.getAll("k1"); // ["1"]
formData.append("k1", "v1");
formData.append("k2",null);
formData.has("k1"); // true
formData.has("k2"); // true
formData.has("k3"); // false
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k1", "v1");
formData.delete("k1");
formData.getAll("k1"); // []
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k2", "v1");
var i = formData.entries();
i.next(); // {done:false, value:["k1", "v1"]}
i.next(); // {done:fase, value:["k1", "v2"]}
i.next(); // {done:fase, value:["k2", "v1"]}
i.next(); // {done:true, value:undefined}
- 每调用一次next()返回一条数据,数据的顺序由添加的顺序决定
- 返回的是一个对象,当其done属性为true时,说明已经遍历完所有的数据,这个也可以作为判断的依据
- 返回的对象的value属性以数组形式存储了一对key/value,数组下标0为key,下标1为value,如果一个key值对应多个value,会变成多对key/value返回
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k2", "v1");
var i = formData.entries();
i.next(); // {done:false, value:"v1"}
i.next(); // {done:fase, value:"v2"}
i.next(); // {done:fase, value:"v1"}
i.next(); // {done:true, value:undefined}
var xhr = new XMLHttpRequest();
xhr.open("post","login");
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(formData);
评论