【发布时间】:2014-06-29 14:19:21
【问题描述】:
我在 Angular 应用程序中使用 UI-bootstrap 模态窗口,但遇到了某种范围问题。
我有一个模式对话框,它基本上有两种模式。首先,它显示一个现有项目列表供用户选择。如果用户需要的项目不在列表中,他可以单击“创建”,然后我隐藏包含列表的 div 并显示另一个包含输入表单的 div,以便用户可以向列表中添加条目。这都是非常琐碎的事情。切换显示哪个 div 的按钮工作正常。我基本上有一个名为“create”的布尔范围变量,它负责这个。
然后,在模态页脚中,我有两个保存按钮。一个在“列表”模式下显示,另一个在用户处于“创建”模式时显示。再次,工作正常。
现在,当用户处于“创建”模式并点击相应的“保存”按钮时,我需要处理表单并最后将状态切换回列表,即设置“创建”范围变量返回 false,但这对我不起作用。这就像我正在处理多个范围,因为当我通过控制器中的按钮单击更新“创建”变量时,视图不会更新。
我已经创建了一个可以工作的 Plunker 来演示这一点,请看一下:
http://plnkr.co/edit/KDxzH21Lmthg0bc0cfUT?p=preview
我知道这可能是我想念的非常简单的事情。希望有人能指出我正确的方向!
编辑: 根据 Mik378 的以下建议,我在范围内创建了一个“中间”对象并为其分配了“创建”变量。现在这就像我想要的那样工作。
我更新了 Plunker:http://plnkr.co/edit/KDxzH21Lmthg0bc0cfUT?p=preview
【问题讨论】:
-
modal 创建自己的子作用域
-
是的,我想通了,但我不确定如何正确访问它来做我需要做的事情。
-
如果您使用的是
scope.myVariableToReach,则必须将其更改为scope.oneIntermediateObjectNotAccessibleInTheChildScope.myVariableToReach。否则直接设置scope.myVariableToReach时,会改变child,不影响outer。 -
好的,我想我明白你的意思了。让我们试试,谢谢。
-
这个问题是原型继承的结果,这里解释:github.com/angular/angular.js/wiki/Understanding-Scopes
标签: angularjs angularjs-scope angular-ui-bootstrap