Javascript 角加载嵌入式控制器

Javascript 角加载嵌入式控制器,javascript,angularjs,angularjs-controller,Javascript,Angularjs,Angularjs Controller,我有一个使用ng控制器标签嵌入的控制器,它工作正常,但我还有一个外部控制器,需要调用此控制器的一个函数: <div ng-controller='NavigationController'> <!-- some html--> </div> 现在我想从另一个控制器触发downloadItems方法 我到处都找不到这应该怎么做 我自己也在学习Angular.js,但我非常确定,如果您想重用这样的逻辑,应该将其应用到服务中。(事实上,不管发生什么情况,将

我有一个使用ng控制器标签嵌入的控制器,它工作正常,但我还有一个外部控制器,需要调用此控制器的一个函数:

<div ng-controller='NavigationController'>
    <!-- some html-->
</div>
现在我想从另一个控制器触发downloadItems方法


我到处都找不到这应该怎么做

我自己也在学习Angular.js,但我非常确定,如果您想重用这样的逻辑,应该将其应用到服务中。(事实上,不管发生什么情况,将这类工作放到服务中都可能是一个好主意,这样就可以很容易地从控制器中分离出来进行测试和重用。)


现在,在控制器外部测试下载过程很容易,模拟downloadItems函数来测试控制器也很容易。

注意:我还不确定明确声明注入服务的正确格式是使用我上面使用的数组方法,还是使用
$inject
属性,但无论哪种方式,我想如果你打算缩小尺寸做一个这样的事情,建议你这样做。
app.controller('NavigationController', function ($scope) {
  $scope.downloadItems = function(value) {
    //do something
  }
})
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);
    ...
}]);