想象一下我有这样的事情:
<html ng-app="myApp">
...
<body ng-controller="GlobalController">
<div id="one">...</div>
...
<div ng-controller="SpecificController" id="subPart">
<div id="two">...</div>
...
</div>
...
</body>
</html>
如您所见,控制器GlobalController
管理整个机构,而SpecificController
仅控制subPart
。
在这种情况下,div#one
可以访问GlobalController
,但div#two
与GlobalController
和 SpecificController
相关联。
我的问题是要知道这样做是不是一种坏习惯,因为我想有两个控制器用于相同的DOM元素(例如div#two
)会导致冲突......
另外,如果这不是一个坏习惯,在这种情况下我应该注意什么?例如,我想我必须小心避免在两个控制器中都有相同的属性,对吧?
感谢。
ps:我不确定是否有人问这个问题。我多次看到这个问题“我可以在同一页面上两次使用相同的控制器”,但这不是我的问题。
答案 0 :(得分:4)
在我看来,没有什么错误,你只是表明控制器之间存在“继承”链,它允许对DOM的某些方面进行更细粒度的控制与页面整体无关。
您对共享属性是正确的,因为子控制器将继承其父控制器的属性:
function ParentCtrl($scope) {
$scope.test = "One";
}
function ChildCtrl($scope) {
console.log($scope.test); // Logs "One";
$scope.test = "Two"; // We've re-defined the variable as "Two"
}
但是,我会尝试在SpecificController
确实从GlobalController
继承的代码中使其显而易见,以避免数据属性的冲突。
答案 1 :(得分:0)
我经常发现,如果你试图将所有内容保存在一个控制器中,特别是对于大页面,那么控制器的大小可能变得难以管理,所以实际上我更喜欢使用父子控制器继承。请记住,当从子DOM元素引用父属性时,您需要谨慎使用父属性命名策略,或者在需要引用时在子DOM中使用$ parent.parentproperty。