2013-07-07 47 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