javascript - angular.js、javascript 中的多个 Controller 实例

标签 javascript angularjs

我有一个 View 由两个相同的部分组成,只是内容不同。所以,基本上我想以某种方式为左右部分使用一个 Controller 和一个 View 。
我做什么(在 html 中):

<div class="board_body">
    <div class="left_board" ng-controller="leftBoardController">
        <div ng-controller="panelController" ng-include="template"></div>
    </div>
    <div class="right_board" ng-controller="rightBoardController">
        <div ng-controller="panelController" ng-include="template"></div>
    </div>
</div>

我将所有初始化逻辑保留在左右 Controller 中,并使用 panelController 及其左右部分的 View 。在这种情况下,panelController 可以共享,因为它使用具有不同值的公共(public) $scope 变量(在左右 Controller 中创建变量,因此它们对 panelCotrl 可见)。

angular.module("radar.leftController", [])
.controller("leftController", function ($scope, ...) { 
    $scope.data = getSomeData();
}

angular.module("radar.rightController", [])
.controller("rightController", function ($scope, ...) { 
    $scope.data = getOtherData();
}

angular.module("radar.panelController", [])
.controller("panelController", function ($scope, ...) { 
    $scope.template = "somePath/panelView.html";
    // shared logic for left and right contrls goes here
}

在 panelView.html 中:

<div>data: {{data.length}}</div>

似乎从右边我可以更改左右变量,但从左边我只能更改左边的变量(如预期的那样)。 (我需要左右部分完全分开)。

那么,重用一个 Controller (创建多个实例)的正确方法是什么?

最佳答案

正确的方法是使用 directives与孤立的范围。 那么您的代码将如下所示:

...
angular.module("radar.panel", [])
.directive("panel", function() {
   return {
    scope: {'panelData': '=' // Doubly bound to panel-data attribute},
    templateUrl: 'somePath/panelView.html'
    controller: function ($scope, ...) { 
      // shared logic for left and right contrls goes here
    }
  }
}
<div class="board_body">
    <div class="left_board" ng-controller="leftBoardController">
        <div panel panel-data="data"></div>
    </div>
    <div class="right_board" ng-controller="rightBoardController">
        <div panel panel-data="data"></div>
    </div>
</div>

关于javascript - angular.js、javascript 中的多个 Controller 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17948884/

相关文章:

javascript - Angular ng-if 保存对 DOM 元素的引用

javascript - 使用 Rails + Devise 在用户注册/登录时执行 JS 代码

javascript - 使用 JS 代码清除 chrome 选项卡历史记录

javascript - Jquery Ajax,缺失;声明之前

javascript - Angular 用户界面 Bootstrap : Set timepicker to be empty by default

javascript - 将动态变化的信息添加到 ng-binding 中

javascript - zippyshare.com 直接下载链接

Javascript正则表达式匹配被其他字符污染的小数

c# - 从 AngularJS 和 ASP.net MVC 传递数据 $http.post 获取 null

javascript - AngularJS 评估函数中的字符串以调用 json 列表上的属性