Angular重载嵌入式控制器

时间:2013-07-07 15:11:04

标签: javascript angularjs angularjs-controller

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

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

和控制器

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

现在我想从其他控制器触发downloadItems方法。

我无法在任何地方找到它应该怎么做?

1 个答案:

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