让两个Angular控制器共享相同的DOM元素是不好的做法?

时间:2014-01-31 08:30:09

标签: javascript html angularjs

想象一下我有这样的事情:

<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#twoGlobalController SpecificController相关联。

我的问题是要知道这样做是不是一种坏习惯,因为我想有两个控制器用于相同的DOM元素(例如div#two)会导致冲突......

另外,如果这不是一个坏习惯,在这种情况下我应该注意什么?例如,我想我必须小心避免在两个控制器中都有相同的属性,对吧?

感谢。

ps:我不确定是否有人问这个问题。我多次看到这个问题“我可以在同一页面上两次使用相同的控制器”,但这不是我的问题。

2 个答案:

答案 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。