我有一个使用ng-controller标签嵌入的控制器,它工作正常,但我还有一个外部控制器需要调用该控制器的一个功能:
<div ng-controller='NavigationController'>
<!-- some html-->
</div>
和控制器
app.controller('NavigationController', function ($scope) {
$scope.downloadItems = function(value) {
//do something
}
})
现在我想从其他控制器触发downloadItems方法。
我无法在任何地方找到它应该怎么做?
答案 0 :(得分:3)
我自己只是在学习Angular.js,但我很确定如果你想重用这样的逻辑,你应该把它放到一个服务中。 (事实上,无论如何将这种工作放入服务中都是一个好主意,因此很容易将其与控制器分开以进行测试和重用。)
app.factory("NavigationService", function() {
return {
downloadItems: function(value) { /* do something */ }
}
});
app.controller("NavigationController", ["$scope", "NavigationService", function($scope, NavigationService) {
$scope.downloadItems = function(value) {
NavigationService.downloadItems(value);
}
}]);
app.controller("OtherController", ["$scope", "NavigationService", function($scope, NavigationService) {
...
NavigationService.downloadItems(value);
...
}]);
现在可以轻松测试控制器外部的下载过程,并且可以轻松模拟downloadItems函数来测试控制器。