Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 让两个角度控制器共享相同的DOM元素是一种不好的做法吗?_Javascript_Html_Angularjs - Fatal编程技术网

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
?@romaintaz
div#two
继承由
GlobalController
定义的任何属性,因为它是嵌套的-