[英]AngularJS: Directive not getting controller's variable from scope
我有一个既有控制器又有应用隔离范围的指令的元素:
scope: {
dirVar: '='
}
目标是仅在变量为true时才运行指令的某些部分。 我正在控制器中设置该变量,并尝试通过attr将其传递到指令中。
问题是当我做类似的事情时
<div ng-controller="MyCtrl" my-directive active="ctrlVar"></div>
并尝试使用scope.active
使指令active
,该指令始终未定义。
这是一个示例: http : //jsfiddle.net/u3t2u/1/
关于为什么或如何正确执行此操作的任何解释? 我假设问题出在将控制器和指令应用于同一元素,并希望解决该问题。
另一个选择是删除指令的隔离范围,并让它评估传递给它的attr,但是我不确定该怎么做( $parse
不断抛出错误)。
那是因为您的指令不在控制器内部。 尝试这个:
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<div my-directive="" active="myValue">
Testing.
</div>
</div>
</div>
最终改变了我构造指令的方式,因为它实际上不应该具有隔离范围,并且这样做的唯一原因是它可以接受表达式并将其评估为真或假。
所以我将其更改为使用$ parse,这使指令看起来像:
var active = $parse(attrs.isActive);
// Evaluate contents of attrs.isActive
// as if they are variables within its scope,
// which is inherited from parent scopes
if(active(scope)) {
// do something
}
我对某些事情不太熟悉,例如transclude和创建隔离的作用域,但这是在阅读了Directives文档并摆弄之后得到的:
我只更改了html的这一部分:
<div ng-controller="MyCtrl">
<div my-directive active="myValue">
Testing.
</div>
</div>
我相信在这种情况下,实际上不必将值传递给my-directive
指令,因为您已经在使用带有=
的隔离范围。 对不起,如果我的解释不太好。 您可以在http://docs.angularjs.org/guide/directive的写作指令(长版)下阅读更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.