http://www.Sina.com/http://www.Sina.com /
将显示一条消息,指示可以通过duplicatesinarepeaterarenotallowed .和track by $index进行解析。 当然,trace by的任何常规值都可以,只要它能唯一标识数组中的所有项即可(与dom建立数据关联)。
http://www.Sina.com/http://www.Sina.com /
过滤器,格式化数据,接收一个输入,根据某些规则处理,并返回处理结果。
内置文件明星
1、内置ng的过滤器有9种:
1 .日期(日期)
2 .货币。
3.limitTo (限制数组或字符串的长度) )。
4 .订单依据(排序) )。
5 .小写字母)。
6.uppercase (大写)。
7.number (格式化数字,加上千位分隔符,接收参数以限定小数位数) )。
8.filter (处理数组并过滤包含某些子列的元素) )。
9.JSON(JSON对象格式) )。
2、过滤器有两种使用方法,
1 )直接在页面上:
p { { now|date : ' yyyy-mm-DD ' }/p
2 )在js中使用:
//$filter ('过滤器名称) ) )需要过滤器的对象、参数1、参数2、) )。
$filter () date )、yyyy-MM-dd hh:mm:ss );
**自定义过滤器
//形式
app.filter ('过滤器名称',function ) )。
返回函数((需要过滤的对象、过滤参数1、过滤参数2,) )。
//做某事
返回处理后的对象;
}
);
//列子
app.filter('timesfilter ',function ) {
返回函数(item,times ) {
var result=' ';
for(varI=0; I时间; I ) {
result =item;
}
返回结果;
}
() )
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /
十一、ng-repeat
将服务的方法和数据放在一个对象中,然后返回该对象
app.factory('fooservice ',function ) {
返回{
目标: '工厂',
> sayHello: function(){return 'hello ' + this.target;
}
}
});
2.service
通过构造函数方式创建 service,返回一个实例化对象
app.service('FooService', function(){
var self = this;
this.target = 'service';
this.sayHello = function(){
return 'hello ' + self.target;
}
});
3.provider
创建一个可通过 config 配置的 service,$get 中返回的,就是用 factory 创建 service 的内容
app.provider('FooService', function(){
this.configData = 'init data';
this.setConfigData = function(data){
if(data){
this.configData = data;
}
}
this.$get = function(){
var self = this;
return {
target: 'provider',
sayHello: function(){
return self.configData + ' hello ' + this.target;
}
}
}
});
// 此处注入的是 FooService 的 provider
app.config(function(FooServiceProvider){
FooServiceProvider.setConfigData('config data');
});
从底层实现上来看,service 调用了 factory,返回其实例;factory 调用了 provider,返回其 $get 中定义的内容。factory 和 service 功能类似,只不过 factory 是普通 function,可以返回任何东西(return 的都可以被访问,所以那些私有变量怎么写,你懂的);service 是构造器,可以不返回(绑定到 this 的都可以被访问);provider 是加强版 factory,返回一个可配置的 factory。
十四、angular 的数据绑定采用什么机制?详述原理
1.脏检查机制。
2.双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。
原理就是,Angular 在 scope 模型上设置了一个 监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条 $watch ,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时, $digest 循环就会触发,遍历所有的 $watch ,最后更新 dom。
举个栗子
<button ng-click="val=val+1">increase 1</button>
click 时会产生一次更新的操作(至少触发两次 $digest 循环)
按下按钮
浏览器接收到一个事件,进入到 angular context
$digest 循环开始执行,查询每个 $watch 是否变化
由于监视 $scope .val 的 $watch 报告了变化,因此强制再执行一次 $digest 循环
新的 $digest 循环未检测到变化
浏览器拿回控制器,更新 $scope .val 新值对应的 dom
$digest 循环的上限是 10 次(超过 10次后抛出一个异常,防止无限循环)。
十五、两个平级界面块a和b,如果a中触发一个事件,有哪些方式能让b知道?详述原理
这个问题换一种说法就是,如何在平级界面模块间进行通信。有两种方法,一种是共用服务,一种是基于事件。
(1)共用服务
在 Angular 中,通过 factory 可以生成一个单例对象,在需要通信的模块 a 和 b 中注入这个对象即可。
(2)基于事件
这个又分两种方式
第一种是借助父 controller。在子 controller 中向父 controller 触发( $emit )一个事件,然后在父 controller 中监听( $on )事件,再广播( $broadcast )给子 controller ,这样通过事件携带的参数,实现了数据经过父 controller,在同级 controller 之间传播。
第二种是借助 $rootScope 。每个 Angular 应用默认有一个根作用域 $rootScope , 根作用域位于最顶层,从它往下挂着各级作用域。所以,如果子控制器直接使用 $rootScope 广播和接收事件,那么就可实现同级之间的通信。
转载于:https://www.cnblogs.com/ndos/p/8331676.html