【发布时间】:2017-01-11 19:34:06
【问题描述】:
我有一个需要嵌套控制器的情况。我不希望子作用域从父作用域继承,因为我在两个控制器中都有同名的作用域变量。有没有办法做到这一点?
我试图阻止 childController 的变量在 parentController 的变量更改时更新。
<div ng-controller="parentController">
{{myVariable}}
<div ng-controller="childController">
{{myVariable}}
</div>
</div>
我知道我可以更改子控制器范围变量的名称来完全避免继承问题,但我正在寻找替代方案。有没有已知的方法可以做到这一点?
有点像隔离指令的范围,但隔离或私有控制器范围。
编辑:我发现当子控制器中没有为该 var 设置默认值时,子控制器将继承父控制器范围 var 值。
比较:http://jsfiddle.net/4qcqdb6z/ 与 http://jsfiddle.net/4qcqdb6z/2/
【问题讨论】:
-
创建一个空范围的 transclude 指令怎么样?和你的 childController 附加
-
这很有趣!我会调查一下。您介意提供一个示例来说明您的想法吗?
-
到底是什么问题?子 div 将显示来自子控制器的 myVariable,而父 div 将显示来自父控制器的 myVariable。这不是你想要的吗?
-
不,父级不能覆盖子级范围内的任何内容。
-
你的做法很好。也可以考虑使用
controller as语法(docs.angularjs.org/api/ng/directive/ngController),不过我个人不喜欢。