2013-07-07 51 views
1

我必须使用NG-控制器标签嵌入控制器,它工作正常,但我也得到了谁需要调用该控制器的一个功能的外部控制器:角重装嵌入式控制器

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

而控制器

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

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

而我无法找到它应该怎么做?

回答

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

+0

一注:我还不确定显式声明注入服务的正确格式是使用上面使用的Array方法,还是使用'$ inject'属性,但是无论如何,我认为这是推荐的你曾经计划缩减去完成其中的一个。 – OverZealous