繁体   English   中英

AngularJS:指令不从范围中获取控制器的变量

[英]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文档并摆弄之后得到的:

http://jsfiddle.net/u3t2u/4/

我只更改了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM