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

标签 angularjs angularjs-directive angularjs-scope

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

相关文章:

angularjs - ng-repeat 中 angularjs 中的 orderBy

javascript - Angular 将一个元素附加到指令内当前元素的子元素

angularjs - 为什么ng-href指令需要{{}}而其他指令则不需要?

javascript - AngularJS 绑定(bind)数据

javascript - angularjs在javascript中获取全局范围变量

javascript - 如何在 Controller 加载之前加载数据?

angularjs - 我如何通过angularjs操纵选择选项

angularjs - 包装 angular-ui tabset 指令并遇到 "Multiple directives asking for transclusion/isolated scope"错误

javascript - ng-click 不适用于 btn 元素

javascript - 对 AngularJS 中指令之间的范围继承感到困惑