如何使ng点击从一个ng重复影响外部范围



我遇到了以下情况,我有一个元素,它通过点击其他元素来添加一个类。其中一些是在一个有自己作用域的ng重复循环中。。。类似的事情: <section id="sign-up" class="sign-up" ng-init="signUp = false"ng-class="{'active': signUp}">

点击时触发类更改的元素使用这个ng-click="signUp = !signUp"

它适用于ng repeat之外的任何元素。。我怎样才能让它工作?

这是一个不遵循我认为的AngularJS黄金规则的经典案例:

无论何时,只要您想通过ng模型或在表达式内部设置作用域上的属性,请始终确保您有。(点/句点)。

因为在您的案例中,ng-repeat正在为数组中的每个项创建一个新作用域。当您有了ng-click="signUp = !signUp"时,这将在该项的作用域上创建一个全新的signUp属性,而不是进一步修改作用域上的signUp属性(通过作用域对象的原型)。这是因为无论何时在JS对象上设置属性,它都会在当前对象上设置该属性,即使该属性存在于原型上。

相反,请尝试将其更改为使用顶级作用域上的中间对象来保存signUp属性,因此您将其称为flags.signUp。这意味着Angular首先在子作用域中查找flags的值,然后通过原型在父作用域中找到对象。然后,它可以在正确的对象上设置signUp标志,而不是在子作用域上。

这些都有道理吗?

最新更新