我在Angular中非常綠色,我甚至不確定我是否正確地構建了搜索。整個指令和服務術語仍然讓我困惑,但那不是我的問題。AngularJS - 從服務中調用控制器功能
我讀過這個優秀的系列文章中從前到後:http://www.ng-newsletter.com/posts/beginner2expert-how_to_start.html
這就是爲什麼我在我的應用程序這一點。爲什麼我知道我的問題更多地涉及服務和控制器之間的關係。而不是語法相關。
因此,這裏的應用程序的概述:
我有一個控制器。這會消失,併爲使用AJAX調用PHP文件的用戶獲取一堆農場數據,並使用它自己的$ scope在屏幕上顯示它。
var masterApp = angular.module('masterApp', ['myFilters','commonControls']);
masterApp.controller('MasterCtrl', ['$scope','$http', '$filter', 'commonFarmSelector',
function($scope, $http, $filter, commonFarmSelector){
...
$scope.masterCtrl.loadFarmData = function(farmId) {
var postdata = {
"farmId":farmId
};
$http.post('/service/farmproduction', postdata).success(function (data) {
// Do stuff with the $scope using data
}
}
$scope.masterCtrl.loadFarms();
}
你會看到我正在注入一種叫做「commonControls」的東西。這是我創建的一個模塊,用於保存將由多個控制器重用的控件。在這種情況下,包含農場的列表,用戶可以訪問(也由一個AJAX調用獲得)下拉場:
var commonControlsApp = angular.module('commonControls', []);
commonControlsApp.controller('farmSelectorCtrl', ['$scope', '$http',function($scope, $http) {
$scope.farmSelectorCtrl ={}
// Change entire farm view when a different farm is selected
$scope.farmSelectorCtrl.switchUserFarm = function() {
var farmId = $scope.farmSelectorCtrl.selectedUserFarm;
$scope.masterCtrl.loadFarms(farmId); // !!! Direct link to masterCtrl
};
// Get a list of the user's farms
$http.post('/service/userfarms').success(function (data) {
$scope.farmSelectorCtrl.userFarms = data.getFarmsPerUserResult.farmIds;
});
}]);
這工作得很好。但正如你所看到的,farmSelector直接鏈接到masterCtrl。並且該loadFarmData函數的行爲特定於該控制器。換句話說,它只會做適用於該頁面的事情。
問題是,這個farmSelector將在其他頁面上使用。每個頁面的更改事件的確切行爲都會有所不同。所以我正在努力研究這種行爲應該放在哪裏。以及如何調用依賴於使用farmSelector的控制器。
我上面鏈接的文章表明這個farmSelector應該在一個服務中,以便它可以在其他地方重用。但是我仍然對如何在通用服務引發事件時採取特定行動感到困惑。
我希望在頭幾個小時之前看到這個答案,如何做到這一點。非常感謝你的努力 –