1

我有一个使用 ng-controller 标签嵌入的控制器,它工作正常,但我还有一个外部控制器需要调用该控制器的一个功能:

<div ng-controller='NavigationController'>
    <!-- some html-->
</div>

和控制器

app.controller('NavigationController', function ($scope) {
  $scope.downloadItems = function(value) {
    //do something
  }
})

现在我想从另一个控制器触发 downloadItems 方法。

而且我在任何地方都找不到它应该怎么做?

4

1 回答 1

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 函数来测试你的控制器。

于 2013-07-07T17:47:14.443 回答