AngularJS:指令没有从范围获取控制器的变量

时间:2013-06-28 02:31:05

标签: javascript angularjs

我有一个元素同时具有一个控制器和一个应用了隔离范围的指令:

scope: {
    dirVar: '='
}

目标是仅在变量成立时才运行指令的某些部分。我在控制器中设置该变量并尝试通过attr。

将其传递给指令

问题是当我做

之类的事情时
<div ng-controller="MyCtrl" my-directive active="ctrlVar"></div>

并尝试使用active在指令中获取scope.active,它总是未定义。

以下是一个示例:http://jsfiddle.net/u3t2u/1/

有关为何或如何正确执行此操作的任何说明?我假设问题在于控制器和指令应用于同一个元素并希望绕过它。

另一种选择是删除指令的隔离范围并让它评估传递给它的attr,但我不确定如何做到($parse不断抛出错误)。

3 个答案:

答案 0 :(得分:1)

这是因为你的指令不在控制器内部。试试这个:

<div ng-app="myApp">
    <div ng-controller="MyCtrl">
        <div my-directive="" active="myValue">
             Testing.
        </div>
    </div>
</div>

答案 1 :(得分:1)

结束改变我构造指令的方式,因为它不应该真的有一个隔离范围,它唯一的原因是它可以采取表达式并将它们评估为真或假。

因此我将其更改为使用$ 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
}

答案 2 :(得分:0)

我对某些事情不太熟悉,例如转录和创建一个孤立的范围,但这是我在阅读指令文档和摆弄后得到的:

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

我只更改了html的这一部分:

<div ng-controller="MyCtrl">
    <div my-directive active="myValue">
    Testing.
    </div>
</div>

我相信在这种情况下,您实际上不必将值传递给my-directive指令,因为您已经使用了=的隔离范围。对不起,如果我的解释不是那么好。您可以在{{3>}的编写指令(长版本)部分下阅读更多内容。

相关问题