मैं कोणीय में इतना हरा हूं, मुझे यह भी यकीन नहीं है कि मैं इस के लिए एक खोज की संरचना कर रहा हूं। पूरा निर्देश और सेवा शब्दावली अभी भी मुझे कुछ भ्रमित कर रही है, लेकिन यह मेरा सवाल नहीं है।एंगुलरजेएस - एक सेवा से नियंत्रक फ़ंक्शन को कॉल करना
मैं वापस करने के लिए इस उत्कृष्ट लेख श्रृंखला सामने पढ़ा है: http://www.ng-newsletter.com/posts/beginner2expert-how_to_start.html
इसीलिए मैं अपने आवेदन में इस बिंदु पर कर रहा हूँ। और मुझे क्यों पता है कि मेरा प्रश्न सेवाओं और नियंत्रकों के बीच संबंधों से अधिक संबंधित है। वाक्यविन्यास से संबंधित।
मैं एक नियंत्रक है:
तो यहाँ एप्लिकेशन के एक सिंहावलोकन है। यह बंद हो जाता है और एक PHP फ़ाइल में AJAX कॉल का उपयोग कर उपयोगकर्ता के लिए खेत डेटा का एक गुच्छा प्राप्त करता है, और इसे अपने स्वयं के $ स्कोप का उपयोग करके स्क्रीन पर प्रदर्शित करता है।
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();
}
आप देखेंगे कि मैं "कॉमनकंट्रोल" नामक कुछ इंजेक्शन कर रहा हूं। यह एक मॉड्यूल था जिसे मैंने नियंत्रण रखने के लिए बनाया था जिसे एकाधिक नियंत्रकों द्वारा पुन: उपयोग किया जाएगा।
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 से जुड़ा हुआ है। और उस लोड का व्यवहार FarmData फ़ंक्शन उस नियंत्रक के लिए विशिष्ट है। दूसरे शब्दों में, यह केवल उन चीजों को करेगा जो उस पृष्ठ पर लागू होते हैं।
बात यह है कि, इस फार्म चयनकर्ता का उपयोग अन्य पृष्ठों पर किया जाएगा। और प्रत्येक पृष्ठ के लिए एक परिवर्तन घटना का सटीक व्यवहार अलग होगा। इसलिए मैं यह काम करने के लिए संघर्ष कर रहा हूं कि इस व्यवहार को कहाँ बैठना चाहिए। और इसे FarmSelector का उपयोग कर नियंत्रक पर निर्भर कैसे कहा जाएगा।
मैंने जो लेख ऊपर लिखा है, वह इस फार्म को सुझाव देता है कि चयनकर्ता सेवा में होना चाहिए ताकि इसे कहीं और उपयोग किया जा सके। लेकिन मैं अभी भी उलझन में हूं कि आप एक सामान्य सेवा कैसे दे सकते हैं जब कोई ईवेंट ट्रिगर होता है।
मेरी इच्छा है कि मैंने यह जवाब कैसे किया जाए, सिर के खरोंच के कुछ घंटों से पहले यह जवाब देखा। प्रयास के लिए बहुत बहुत धन्यवाद –