交互
$http —— 依赖项 ($scope $http)
$http.get();
$http.post();
$http.jsonp();
$http.get('请求地址').then((r)=>{
//成功
//r.data
},(err)=>{
//失败
});
Promise
1)基本用法,发一个请求
new Promise((resolve,reject)=>{ $.ajax({ url: dataType: success(r){ resolve(r); }, error(err){ reject(err); } }); }).then((r)=>{ //成功了 },(e)=>{ //失败了 });
2)Promise.all()
Promise.all([
//发请求的Promise对象
new Promise(),
new Promise(),
....
]).then(r=>{
//以上数组中,指定的所有的请求,全部都成功,才是成功
},err=>{
//以上数组中,指定的所有的请求,只要有一个失败,就是失败
});
3)发现 jquery 的 $.ajax 返回值,返回一个Promise对象
Promise.all([
$.ajax({url:'1',dataType:'json'}),
$.ajax({url:'2',dataType:'json'}),
$.ajax({url:'3',dataType:'json'}),
]).then(r=>{
//r : 数组,多次请求返回结果的数组
//单独处理每次请求的结果
let [arr1,arr2,arr3] = r;
console.log(arr1); —— 第一个请求的返回值
},err=>{});
4)
Promise.race([
$.ajax(),
$.ajax()....
]).then(r=>{
r —— 以上所有的请求,最快的那个
},err=>{});```
PS:在Angular 中使用 Promise:
- 1、angular中,使用原生的 Promise,出问题了
在then里处理数据的时候,$scope.nums = arr1 生效,但是页面无法使用 - 2、angular 自己提供了一个 Promise,
新的依赖项: $q
jQuery Ajax另几种写法:
1、$.get('data/a.txt',{a:1},r=>{
console.log(typeof r);
});
返回值是string类型
2、$.post('data/a.txt',{a:1},r=>{
console.log(typeof r);
});
返回值是string类型
3、$.getJSON().....
返回值是 json 对象
Angular和其它库或原生的很多东西不通用:
1) $.ajax jquery
2) Promise 原生 $q
3)定时器
原理:因为函数,在Angular中,它认为所有的东西都应该出现在自己的controller函数里,
对于其它地方回调函数里的值的处理,不认
定时器:
$interval
$timeout
解决以上问题的另外一个方法:
$scope.$apply();
——通俗地说: 告诉、通知 Angular , 来看一下数据是不是变了
网友评论