저는 Angular에서 너무 초록색입니다.이 검색을 제대로 구조화하고 있는지 확실하지 않습니다. 전체 지침과 서비스 용어는 여전히 나에게 다소 혼란 스럽지만, 그것은 내 질문이 아닙니다.AngularJS - 서비스에서 컨트롤러 함수 호출
나는 백업이 우수한 기사 시리즈의 앞을 읽었습니다 : 내 응용 프로그램에서이 시점에서 나는 왜 http://www.ng-newsletter.com/posts/beginner2expert-how_to_start.html
입니다. 그리고 왜 내 질문이 서비스와 컨트롤러 간의 관계에 더 관련이 있는지 알 수 있습니다. 구문과 관련이 있습니다.
다음은 앱의 개요입니다.
컨트롤러가 하나 있습니다. 이것은 떨어져 나가고 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"라는 것을 주입하고 있습니다. 이것은 여러 컨트롤러가 다시 사용할 수있는 컨트롤을 보유하기 위해 만든 모듈입니다. 이것은 잘 작동
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;
});
}]);
이 경우, (또한 AJAX 호출에 의해 수득)는 사용자가 액세스 할 수있는 농장의리스트를 포함하는 드롭 다운 필드. 그러나 볼 수 있듯이 farmSelector는 masterCtrl에 직접 연결됩니다. 그 loadFarmData 함수의 동작은 해당 컨트롤러에만 해당됩니다. 즉, 해당 페이지에만 적용되는 작업을 수행합니다.
이 FarmSelector는 다른 페이지에서 사용됩니다. 그리고 변경 이벤트의 정확한 동작은 각 페이지마다 다를 수 있습니다. 그래서 나는이 행동이 어디에 있어야 하는지를 고민하고 있습니다. 그리고 farmSelector를 사용하여 컨트롤러에서 종속성을 호출하는 방법.
위에서 링크 된 기사에서는이 farmSelector가 서비스에 있어야 다른 곳에서 재사용 할 수 있음을 제안합니다. 그러나 나는 일반적인 서비스에 이벤트가 발생했을 때 취할 구체적인 조치를 제공하는 방법에 대해 여전히 혼란 스럽다.
나는 몇 시간 동안 머리를 숙이는 방법으로이 답변을 보았 으면합니다. 노력에 감사드립니다. –