在我的角度应用程序中,我有两个表,每个表都有自己的控制器。这两个表使用ng-repeat来显示从REST API中恢复的信息。这两个表的控制器以相同的方式与API交互,通过相同的服务,只提供不同的路径 我的大多数逻辑已被抽象为服务,但它仍然感觉愚蠢地复制了两个控制器之间留下的所有代码,只改变了一个值。我可能正在以错误的方式思考这个问题,但我似乎无法找到一种简洁的方法来构建'带参数的控制器。
我已经研究过使用带有'路径的指令'属性,但由于行将不同,我最终会得到两个单独的指令/模板。为了避免这种情况,我尝试转换构建表行的ng-repeat,但事实证明,被转换的元素仍然与外部作用域相关联,而不是指令(以及它的控制器)。
是否有正确的角度"这样做的方法?
答案 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>