Javascript 让两个角度控制器共享相同的DOM元素是一种不好的做法吗?
想象一下我有这样的东西:Javascript 让两个角度控制器共享相同的DOM元素是一种不好的做法吗?,javascript,html,angularjs,Javascript,Html,Angularjs,想象一下我有这样的东西: <html ng-app="myApp"> ... <body ng-controller="GlobalController"> <div id="one">...</div> ... <div ng-controller="SpecificController" id="subPart"> <div id="two
<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>
...
...
...
...
...
...
如您所见,控制器全局控制器
管理整个身体,而特定控制器
仅控制子部分
在这种情况下,div#one
可以访问GlobalController
,但是div#two
链接到GlobalController
和特定控制器
我的问题是知道这样做是否是一种不好的做法,因为我认为为相同的DOM元素使用两个控制器(例如div#two
)可能会导致冲突
另外,如果这不是一个坏习惯,在这种情况下我应该注意什么?例如,我想我必须小心避免在两个控制器中具有相同的属性,对吗
谢谢
附言:我不确定是否有人问过这个问题。我多次看到“我可以在同一页中使用相同的控制器两次”的问题,但这不是我的问题。在我看来,这没什么错,你只是表明存在“继承”控制器和它之间的链允许对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
。我经常发现,如果您试图将所有内容都保存在单个控制器中,尤其是对于大型页面,然后,控制器的大小可能变得不可管理,因此实际上我更喜欢使用父子控制器继承。请记住,当从子DOM元素引用父属性时,您需要谨慎使用父属性命名策略,或者在需要引用时在子DOM中使用$parent.parentproperty。事实上,我感觉我的div#two
无法与GlobalController
上的$scope.foo
属性交互。我正在尝试创建一个JsFidlle,我将编辑我的问题…为什么SpecificController
应该继承自GlobalController
-它不共享div#one
?@romaintazdiv#two
继承由GlobalController
定义的任何属性,因为它是嵌套的-