2013-07-07 6 views
1

У меня есть контроллер встроенный с помощью тега нг-контроллера, и он работает нормально, но я также получил внешний контроллер, который нужно вызвать одну функцию этого контроллера:Угловая перезарядка встроенный контроллер

<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, который я использовал выше, или для использования свойства '$ injection', но в любом случае, я думаю, что рекомендуется, если вы когда-либо планируете минимизировать, чтобы сделать один из них. – OverZealous

Смежные вопросы