大佬教程收集整理的这篇文章主要介绍了AngularJS会覆盖隔离的指令范围,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<my-directive my-var="true"></my-directive>
指示:
app.directive('myDirective',[ function () { var deFinition = { reStrict: "E",replace: false,transclude: false,scope: { myVar: '@',},controller: ['$scope',function($scopE) { console.log($scope.myVar); // "true" $scope.myVar = "false"; console.log($scope.myVar); // "false" setTimeout(function() { console.log($scope.myVar); // "true" (!) },100); }] }; return deFinition; } ]);
控制台输出
"true" "false" "true"
这里到底发生了什么?变量以字符串形式传递(“true”),我正在改变它,然后再次被替换?我想了解这里的循环.这是因为还有一些额外的编译或摘要周期,并再次重新计算所有隔离的范围值?我认为一旦设置,像这样传递的变量(@,只是指令中的字符串)将保持不变?
是否有任何方法可以将指令挂钩到片刻之后,之后不会替换字符串变量,或者它是否会像每个摘要或诸如此类的东西一样工作,并且我被迫使用$watch?
Under the covers,Angular调用attrs.$使用“@”观察元素属性.这样做的是它在编译后为下一个$digest周期排队一个观察者函数.每次分配给属性的内插值发生变化时,该观察者函数就会设置范围变量.
因此,高级步骤是:
1) for `@` scope variable,set an observer function and queue it for later 2) set `@` scope variable to thE interpolated value 3) run the controller,pre- and post-link functions ... N) observer runs against interpolated value and sets the scope value
因此,鉴于此,您现在可以看到为什么您的更改不会持续存在.如果你在所有这些步骤之后完成它 – 即超时或响应事件.并且仅当属性插值没有改变时.
“=”并非如此.
如果您想要一次性传递变量,只需使用链接函数或控制器中的属性设置范围变量
scope.myVar = $attrs["my-var"];
并从范围中@L_757_22@myVar.
以上是大佬教程为你收集整理的AngularJS会覆盖隔离的指令范围全部内容,希望文章能够帮你解决AngularJS会覆盖隔离的指令范围所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。