我如何传递一个 Controller 范围作为对我的指令的引用?我想传递一些值,例如
<mydirective id="data.User.id" name="data.User.name" />
到指令,当指令在内部更改时,在 Controller 中更新它。
Controller 中的作用域是:
$scope.data= {
User: {
id: '1',
name: 'foobar'
}
}
我知道我可以在指令中使用 scope: {...}
来链接一些像这样的范围属性
scope: {
id: '=',
name: '=',
},
但据我了解,这基本上是“硬编码”的?我的意思是更改后的数据将始终在 Controller 中作为 $scope.id 和 $scope.name 提供。但我想更改 Controller $scope.data.User.id 中传递的 data.User.id
。
我想使用传递给指令的数据在父 Controller 中更新它。有什么办法吗?
编辑:我对我想要完成的事情的解释显然有问题,让我尝试更好地解释它。
我不想在 Controller 作用域的特定作用域属性之间引入硬依赖。我基本上是在寻找一种解决方案,将特定的数据绑定(bind)传递给我可以在其中修改的指令。
我不想这样做:
scope: {
data: "="
}
因为它会使指令依赖于存在的 Controller $scope.data。更糟糕的是,它会依赖于 $scope.data.User.id
和名称。 我想使指令可重用,我将任何传递给指令的两个值。传递的值应该在指令内更新,并且更改反射(reflect)在 Controller 范围内。两个传递的值(id、name)应该仍然绑定(bind)(引用)到 Controller $scope。所以我希望指令中的 name
映射到 $scope.data.User.name
而不将其硬编码到组件中。
也许我的整个架构是错误的,如果是这样,我怎样才能做得更好?
最佳答案
您可以传递整个“数据”对象,例如:
<mydirective id="data.User.id" name="data" />
然后:
scope: {
data: "="
},
然后您将能够访问隔离范围的“数据”内的所有数据。
您还可以从指令中删除隔离作用域,并仅在指令的 Controller /链接函数中访问它。 希望它能回答您的问题...
关于angularjs - Angular.js 传递范围属性作为对指令的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578697/