结合几乎相同的控制器

时间:2016-07-13 20:32:21

标签: javascript angularjs angularjs-controller

在我的角度应用程序中,我有两个表,每个表都有自己的控制器。这两个表使用ng-repeat来显示从REST API中恢复的信息。这两个表的控制器以相同的方式与API交互,通过相同的服务,只提供不同的路径 我的大多数逻辑已被抽象为服务,但它仍然感觉愚蠢地复制了两个控制器之间留下的所有代码,只改变了一个值。我可能正在以错误的方式思考这个问题,但我似乎无法找到一种简洁的方法来构建'带参数的控制器。

我已经研究过使用带有'路径的指令'属性,但由于行将不同,我最终会得到两个单独的指令/模板。为了避免这种情况,我尝试转换构建表行的ng-repeat,但事实证明,被转换的元素仍然与外部作用域相关联,而不是指令(以及它的控制器)。

是否有正确的角度"这样做的方法?

1 个答案:

答案 0 :(得分:1)

您可以在另一个中重复使用 base 控制器并根据需要调整其值,或者在创建控制器之前准备好示波器。

angular.module('example')
.controller('BaseController', function($scope, MyService) {
  var receiveData = function(data) { /* ... */ };
  MyService.fetchData($scope.customUrl || '/default/url').then(receiveData);
  // the rest of the controller's code
});
.controller('AnotherController', function($scope, $controller) {
  $scope.customUrl = '/custom/url';
  var controller = $controller('BaseController', {$scope: $scope});
});

另一种选择是从与控制器关联的元素中读取值。

angular.module('example', [])
  .controller('MyController', function($scope, $attrs) {
    var url = $attrs.url || '/default/url';
    $scope.url = url;
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="example">
  <div ng-controller="MyController" url="/custom/url">
    The controller's URL is <code>{{ url }}</code>.
  </div>
</div>