Angularjs属性文字值与表达式求值



我很难理解angularjs是如何决定如何评估属性的。例如,使用ng-repeat:

<div ng-repeat="item in items"></div>

item in items部分将被评估为一个表达式,以查找控制器中某处设置的items数组的内容。

但使用ng-src:

<img ng-src="/path/to/img/"></img>

CCD_ 5将被认为是文字。如果我想让它"动态",我必须写:

<img ng-src="/path/to/img/{{id}}"></img>

其中CCD_ 6被设置在控制器中。

问题:在为自定义指令定义自定义属性时,如何选择要遵循的行为?

没有什么可供选择的。属性值中的表达式由$interpolate服务进行插值。后者使用$parse服务来计算字符串中的每个表达式。

某些指令(ng-ifng-hide)只期望属性中的表达式,该属性通常在API文档中指定。在这种情况下,可以省略括号,并且表达式将在指令中求值-经常使用$scope.$watch,而不是显式调用$interpolate

ng-repeat属性语法(在文档中称为"重复表达式")由指令本身解析,与Angular表达式无关。

将属性定义为表达式将在指令链中为您提供巨大的可能性-您将逃脱使我们都掉队的隔离范围错误。一个特殊的带有ng个重复或另一个默认值的链。

我在引导程序代码中看到的内容并开始在自己的范围内使用-I$eval表达式,然后将其传递给指令局部变量,而不是在隔离范围内定义。

<div custom some-val='ctrl.data'></div>
//directive link or controller
var private = $scope.$eval($attrs.someVar);

$eval的唯一缺点是它适用于静态变量。对于动态,您需要已经评估过的值,或者最好的方法是将其放入可以在指令之间共享的ng模型中(如果我错了,请修复我)

或者只是对表达式的结果运行观察程序,这要简单得多。

最新更新