同一指令的多个角度实例,作用域不是孤立的

Angular multiple instances of same directive, scope is not isolated

本文关键字:作用域 实例 指令      更新时间:2024-05-30

在创建具有独立作用域的多个指令时遇到问题:当我更改第一个指令中的某些内容时,它也会更改所有其他指令。

以下是一个工作示例:http://plnkr.co/edit/drBghqHHx2qz20fT91mi?p=preview(尝试添加更多类型1的"可用通知"-第一个的更改将反映在类型1的所有其他指令中)

我在这里找到了一些类似问题的解决方案,但对我来说不起作用。还在指令(app.js,第76行)中找到了一个将"订阅"数据映射到本地范围变量的有效解决方案,但我认为应该有一种更通用的方法来做到这一点,对吗?

在指令"notificationitem"中,您有以下代码,请在我解释时记住:

// if all variables are mapped in this way than works
//$scope.enabled = $scope.subscription.enabled;

所有"隔离"作用域都在更新的原因是同一指令(notificationitem)中作用域声明中的以下代码:

scope: {
      subscription: '=',
      index: '@'
    },

订阅上的等号是angular的说法:"每当当前作用域更新时,转到父作用域并更新该值。"这意味着每当更新"孤立"作用域时,它也会更新父作用域由于所有这些隔离的作用域都绑定到父作用域,因此它们也会发生更改

由于您希望subscription.value是该文本字段的默认值,因此您需要执行注释代码正在执行的操作:

scope.value = scope.subscription.value;

这将在隔离作用域内创建一个隔离值当scope.value更改时,scope.subscription.value将不会更改。所有的文本字段现在都有自己的"值"来跟踪。

有关指令绑定的信息,请查看本文:http://www.ng-newsletter.com/posts/directives.html

此外,如果您不喜欢上面的解决方案,另一种获得默认值的方法是将您的服务注入指令中。希望这一切都能有所帮助。