【前端】牛客练题积累——AngularJS
AngularJS方面:
每当一个指令被创建的时候,都会有这样一个选择,是继承自己的父作用域(一般是外部的Controller提供的作用域或者根作用域($rootScope)),还是创建一个新的自己的作用域,当然AngularJS为我们指令的
scope
参数提供了三种选择,分别是:false
,true
,{}
;默认情况下是false
。当把
scope
属性设置为true
时,这表明我们创建的指令要创建一个新的作用域,这个作用域继承自我们的父作用域。当我们将
scope
设置为false
的时候,我们创建的指令和父作用域(其实是同一个作用域)共享同一个model
模型,所以在指令中修改模型数据,它会反映到父作用域的模型中。scope:{}这个属性会创建一个独立的作用域,而且也不会继承父作用域.
注:在子scope中,使用$parent.parentScopeProperty。这将阻止子scope创建它自己的属性,可以直接修改父作用域的属性。
编译三阶段:
1. 标准浏览器API转化
将html转化成dom,所以自定义的html标签必须符合html的格式
2. Angular compile(绑定dom)
搜索匹配directive,按照priority排序,并执行directive上的compile方法
3. Angular link(数据绑定)
执行directive上的link方法,进行scope绑定及事件绑定
angular js中control间通信最好使用广播的方式
发送消息: $scope.$emit(name, data) 或者 $scope.$broadcast(name, data);
接收消息: $scope.$on(name,function(event,data){ });
区别: $emit 广播给父controller $broadcast 广播给子controller
broadcast 是从发送者向他的子scope广播一个事件。
$emit 广播给父controller,父controller 是可以收到消息
$on 有两个参数function(event,msg) 第一个参数是事件对象,第二个参数是接收到消息信息
then()方法返回一个Promise。它有两个参数,分别为Promise在 success 和 failure 情况下的回调函数。 p.then(function(value) { // 满足 }, function(reason) { // 拒绝 });
promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled)、已完成(resolved)和拒绝(rejected)。