AngularJS+跨域相关笔记(二)

1.AngularJS作用域


◆说明:每个控制器都会对应一个模型,也就是$scope对象,不同层级的控制器既代表一个作用域,通过使用$scope就能察觉到这个作用域。


◆根作用域:一个AngularJS的应用(App)在启动时会自动创建一个跟作用域$rootScope,这个根作用域在整个应用范围(ng-app所在标签以内)都是可以被访问到的。


◆子作用域:通过ng-controller指令可以创建一个子作用域,新建的作用域可以访问其父作用域的数据。


◆这个AngularJS作用域与js的全局作用域和函数作用域几乎一样。







2.Angular过滤器:使用过滤器格式化展示数据,过滤器的本质就是一个函数,内置的有九个。
◆使用方式:在{{}}中使用|来调用过滤器,使用:传递参数,可以使用|调用过滤器多次,{{price|currency:'¥'}}表示将price值格式化为人民币来展示数据。◆currency将数值格式化为货币格式,<li>{{price|currency:'¥'}}</li>
◆date日期格式化,年(y)、月(M)、日(d)、星期(EEEE/EEE)、时(H/h)、分(m)、秒(s)、毫秒(.sss),也可以组合到一起使用,<li>{{now|date:'yyyy/MM/dd hh:mm:ss'}}</li>。

filter在给定数组中选择满足条件的一个子集,并返回一个新数组,其条件可以是一个字符串、对象、函数,<li>{{items|filter:'s'}}</li><li>{{students|filter:{age: 16} }}</li>,注意filter后面如果是一个对象,那么}与两个}之间要空格一下

json将Javascrip对象转成JSON字符串,<li>{{students|json}}</li>。
◆limitTo取出字符串或数组的前(正数)几位或后(负数)几位,<li>{{items|limitTo:-1}}</li>
◆lowercase将文本转换成小写格式,<li>{{str|lowercase}}</li>
◆uppercase将文本转换成大写格式,<li>{{str|uppercase|limitTo:3}}</li>

number数字格式化,可控制小位位数,<li>{{items|orderBy: '':true}}</li>

orderBy对数组进行排序,第2个参数可控制方向<li>{{students|orderBy: 'age': false}}</li>,true为降序,false为升序。


3.AngularJS自定义过滤器
◆过滤器的本质就是一个函数
◆与创建AngularJS指令一样的步骤
◆自定义过滤器:
App.filter('demo', function () {
//返回一个回调用函数
return function (input) {
//在这里面处理数据
console.log('hello' + input);
return 'hello' + input;
}
});
◆  


4.AngularJS的依赖注入
◆  AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系
◆  所谓依赖注入是指在运行时自动查找依赖关系,然后将查找到依赖传递给使用者的一种机制。
◆  常见的AngularJS内置服务有$http、$location、$timeout、$rootScope等
◆  推断式注入:没有明确声明依赖,AngularJS会将函数参数名称当成是依赖的名称。【
var App = angular.module('App', []);
// 开发者在开发的时候可以直接使用这些“模块”
// 推断式依赖注入,抱着试试看的心态去找函数中参数名的模块儿,然后再注入,会导致压缩代码的时候函数参数的名称改变而无法注入
App.controller('DemoController', function ($scope, $http) {
$scope和$http就是AngularJS 内置一些具有特殊功能的“模块“,
});

◆  行内式注入:以数组形式明确声明依赖,数组元素都是包含依赖名称的字符串,数组最后一个元素是依赖注入的目标函数。推荐使用这种方式声明依赖【
var App = angular.module('App', []);
// 行内式注入
App.controller('DemoController', ['$scope', '$http', function (abc, bcd) {
abc.name = '依赖注入';
}]);

◆  


5.跨域有三种情况,协议不一样(http、https)、域名不一样(www.baidu.com、www.sina.com)、端口不一样(80、8080)。


6.AngularJS内置服务
◆使用内置服务,必须要依赖注入,和直接依赖注入模型的方式是一样的。
◆$location【
◇是对原生js中BOM里的location属性的封装,可以用来获取或者设置页面浏览器地址栏的一些信息,原生的有点不怎么好用,$location更加完善好用一些了。
◇地址是由若干部分组成:http://(协议)、www.baidu.com(124.14.134.12,主机)、:8080(端口号)、#abc(锚点)、?name=itcast&age=10(查询参数据,querystring)。
◇$location.absUrl():当前网站该网页的绝对路径
◇$location.url():当前网页文件位于该网站的路径
◇$location.host():当前网站该网页的主机名
◇$location.search():当前网站该网页url中的查询字符串queryString
◇$location.hash():当前网站该网页url中锚点信息
◇$location.protocol():当前网站该网页url所使用的协议
◇$location.port():当前网站的端口号。

◆$timeout&$interval【
◇是对原生Javascript中的setTimeout和setInterval进行了封装。
◇使用方法是一模一样的

◆$filter【
◇AngularJS在视图中使用格式化过滤器也可以在控制器中格式化数据。
◇var App = angular.module('App', []);
// $filter是过滤器
App.controller('DemoController', ['$scope', '$filter', function ($scope, $filter) {
// $filter可以是内置的九种过滤器中任何一个
$scope.price = 11.11;
var currency = $filter('currency');
$scope.price = currency($scope.price);
$scope.str = 'hello angular';
var uppercase = $filter('uppercase');
$scope.str = uppercase($scope.str);
$scope.str1 = $filter('limitTo')($scope.str, 2);
}]);


◆$log【
◇打印调试信息,其实就是console对象的封装
◇$log.info('普通信息')
◇$log.warn('警告信息')
◇$log.error('错误信息')
◇$log.log('打印信息')
◇$log.debug('调试信息')


◆$http【
◇用于向服务端发起异步请求,本质是对XMLHttpRequest对象的封装。
◇$http({
url:'example.php',
//method:'get',
method:'post',
//设置请求头部信息
headers:{//post请求提交数据时需要添加
'Content-Type':'application/x-www-form-urlencoded'
},
params:{//给get方式传参
name:'小强'
set:'男'
},
//给post方式传参,AngularJS内部并没有想Jquery一样将对象转为key=value,所以只能够直接写字符串
data:'age=10'
}).success(function(info){
//info 就是返回的数据
});
◇不要和jQuery去比,因为封装肯定不一样,但原理就是封装ajax那一套。
◇注意点:传递的数据可以是key=val&key=val的形式,这种形式叫formData,但是必须将Content-Type设置成application/x-www-form-urlencoded,不然后台接收不到。因为当请求数据类型不一样,后端在接收的时候采用方法不一样。
◇AngularJS优先支持的是RESTFUL接口方式的请求,所以就没有再post请求时没有将data中的对象转换为key=value的方式,所以data只能手写字符串key=value。
◇同时还支持多种快捷方式如$http.get()、$http.post()、$http.jsonp()。
◇$http({
//AngularJS内部会自定义一个函数,你只需要写一个占位的函数即可
url:'jsonp.php?fn=JSON_CALLBACK',
method:'jsonp',
}).suncess(function(info){
//直接输出从后台传递来的数据
console.log(info);
})





7.工作中的使用接口方式
◆有关接口的文档,是一个说你该如何请求数据的文档
◆请求地址:xxx/xxx.php
◆请求方式:post
◆参数:id[用户ID]  page[页码]
◆可能返回如下数据:[]、''、{}
◆接口方式:SOAP、RESTFUL



8.jsonp原理
◆通过src或者href属性拥有跨域的功能,不过只能够使用get请求,一般是通过传递函数名,后端接收函数名,以拼接函数调用时字符串返回到前端,由浏览器接收执行,后端拼接的函数调用字符串时可以传递数据,这样一来前端就能够接收到数据。
◆可以创建script标签元素,然后设置src属性,接收到结果后,直接调用即可。
◆jsonp需要后端配合,因为拼接调用函数时的字符串和传递数据都是后端来实现,前端只负责设置src属性然后执行后端传递过来函数。


9.天气API:百度搜索 车联网 天气即可查到。
◆$http({
url:'http://api.map.baidu.com/telematics/v3/weather',
method:'jsonp',
params:{
//地址
location:'北京',
//输出类型
output:'json',
//密钥 自己去申请,很容易
ak:'',
//回调函数占位符 任何名字都可以
callback:'JSON_CALLBACK'
}
}).success(function(info){
//传递过来的数据
console.log(info);
})

猜你喜欢

转载自blog.csdn.net/jwllwj_2018/article/details/80621273