Angularjs留存(三)

前端之家收集整理的这篇文章主要介绍了Angularjs留存(三)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


PS:AngularJS留存系列主要是用来记录一些自己在学习其他文章时觉得有必要留存一下的fortune!

文章可能会很长(默认每篇17个小的知识点),但是我们可以使用Ctrl + F 来查找啦!


1、$parse/$eval和$observe/$watch如何区分

$parse和$eval

首先,$parse跟$eval都是用来解析表达式的, 但是$parse是作为一个单独的服务存在的。$eval是作为scope的方法来使用的。
$parse典型的使用是放在设置字符串表达式映射在真实对象上的值。也可以从$parse上直接获取到表达式对应的值。

var getter = $parse('user.name'); 
var setter = getter.assign; 
setter(scope,'new name');
getter(context,locals) // 传入作用域,返回值
setter(scope,0)">'new name') // 修改映射在scope上的属性的值为‘new value’

$eval 即scope.$eval,是执行当前作用域下的表达式,如:scope.$eval('a+b'); 而这个里的a,b是来自 scope = {a: 2,b:3};
看看源码它的实现是

$eval: function(expr,locals) {
    return $parse(expr)(this,locals);
},

可以找到它也是基于$parse,不过它的参数已经被固定为this,就是当前的scope,所以$eval只是在$parse基础上的封装而已,是一种$parse快捷的API。

2、AngularJS内幕详解之 Directive

controller这是一个指令的控制器实例。

指令可以有控制器,这说得通是因为指令可以创建 scope 。该控制器在所有的同一 scope 的指令中共享,同时可以作为 link 函数的第四个参数被访问到。在同一层级的scope上,这些控制器是指令间的一个可用的通信信道,也可能包含指令自身。

使用控制器别名允许你在模板里面引用控制器,因为他在 scope 中是可见的。


引入其他指令并注入到控制器中,并作为当前指令的链接函数的第四个参数。require使用字符串或数组元素来传入指令。如果是数组,注入的参数是一个相应顺序的数组。如果这样的指令没有被找到,或者该指令没有控制器, 就会报错。 require参数可以加一些前缀:

  • (没有前缀)如果没有前缀,指令将会在自身所提供的控制器中进行查找,如果没有找到任何控制器就抛出一个错误
  • ? 如果在当前指令中没有找到所需要的控制器,会将null作为传给link函数的第四个参数。
  • ^ 如果添加了^前缀,指令会在上游的指令链中查找require参数所指定的控制器。
  • ?^ 将前面两个选项的行为组合起来,我们可选择地加载需要的指令并在父指令链中进行查找。

在我们的工作中,如果我们的指令需要依赖其他的指令时,require 很有用。 举个例子, 你或许有个 dropdown 指令,他依赖一个 list-view 指令, 或者一个错误弹框的指令依赖一个错误消息指令。在下面的例子中,反过来说,定义一个 needs-model 指令, 如果他没有找到依赖的 ng-model 就会抛出一个错误 —— 因为 needs-model指令使用了那个指令,或者某种程度上取决于他在元素上可用。

angular.module('PonyDeli').directive(‘needsModel’, function (){returnrequire: 'ngModel’,} });
<div needs-modelng-model=’foo’></div>

3、

原文链接:https://www.f2er.com/angularjs/148706.html

猜你在找的Angularjs相关文章