角度重载嵌入式控制器

Angular reload embedded controller

本文关键字:嵌入式控制器 重载      更新时间:2023-09-26

我有一个使用ng控制器标签嵌入的控制器,它运行良好,但我也有一个外部控制器,需要调用该控制器的一个函数:

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

和控制器

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

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

我在任何地方都找不到该怎么做?

我自己只是在学习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函数来测试控制器也很容易。