私はAngularでとても緑色ですが、私はこれを正しく検索することさえ確信していません。ディレクティブとサービスの用語全体が私にはまだ混乱していますが、それは私の質問ではありません。AngularJS - サービスからコントローラ関数を呼び出す
私がバックアップするために、この優れた記事シリーズのフロントを読んだ:私は自分のアプリケーションでは、この時点で午前なぜhttp://www.ng-newsletter.com/posts/beginner2expert-how_to_start.html
です。なぜ私の質問がサービスとコントローラの関係にもっと関係しているのか分かりません。構文に関わらず。
これはアプリの概要です:
私は1つのコントローラを持っています。これはオフになり、PHPファイルへのAJAX呼び出しを使用してユーザーのためのファームデータの束を取得し、それ自身の$ 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がサービス内に存在し、他の場所で再利用できるようにすることを示しています。しかし、私は、ジェネリックサービスにイベントがトリガーされたときに取る特定のアクションを与える方法について、まだ混乱しています。
私は頭の数時間前にこの答えを見て、それをどうやって行うのがいいかと思います。努力してくれてありがとう –