gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:58:20 24 4
gpt4 key购买 nike

我如何传递一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com