Angular.js传递范围属性作为指令的引用?

时间:2014-03-22 14:14:09

标签: angularjs angularjs-directive angularjs-scope

如何将控制器作用域作为参考传递给我的指令?我想传递一些像

这样的值
<mydirective id="data.User.id" name="data.User.name" />

指令,当指令在内部更改时,在控制器中更新它。

控制器中的范围是:

    $scope.data= {
        User: {
            id: '1',
            name: 'foobar'
        }
    }

我知道我可以在指令中使用scope: {...}链接一些范围属性,例如

    scope: {
        id: '=',
        name: '=',
    },

但据我所知,这基本上是&#34;硬编码&#34;?我的意思是更改的数据将始终在控制器中以$ scope.id和$ scope.name的形式提供。但我想更改控制器$ scope.data.User.id中传递的data.User.id

我想使用传递给指令的数据来在父控制器中更新它。有什么办法吗?

编辑:我对我想要完成的工作的解释显然存在问题,让我尝试更好地解释一下。

想要在控制器范围的特定范围属性之间引入硬依赖关系。我基本上都在寻找一种解决方案,将特定的数据绑定传递给我可以在其中修改的指令。

想要这样做:

scope: {
        data: "="
}

因为它会使指令依赖于控制器$ scope.data存在。更糟糕的是,它会依赖于$scope.data.User.id和名称。 我希望将指令重复使用,并将任意两个值传递给指令。传递的值应该在指令内更新,并且更改反映在控制器范围内。两个传递的值(id,name)应该仍然绑定(引用)到控制器$ scope。所以我希望指令中的name映射到$scope.data.User.name ,而无需对组件进行硬编码。

也许我的整个架构是错误的,如果是这样,我怎么能做得更好?

1 个答案:

答案 0 :(得分:3)

您可以传递整个&#34;数据&#34;对象,如:

<mydirective id="data.User.id" name="data" />

然后:

scope: {
        data: "="
},

然后,您就可以访问隔离范围内的所有数据&#34;数据&#34;。

您还可以从指令中删除隔离范围,只需在指令的控制器/链接功能中访问它。 希望它能回答你的问题...