मैं यह पता लगाने की कोशिश कर रहा हूं कि जब मेरा डेटा किसी सेवा में संग्रहीत होता है तो आप बाध्यकारी तरीके से कैसे संभालते हैं।AngularJS सेवाओं में डेटा बाध्यकारी संभाल
अगर यह $ स्कोप में सेवा डालता है और फिर टेम्पलेट्स को सीधे इसमें बांधने के लिए काम मिल सकता है लेकिन यह वास्तव में एक बुरा विचार लगता है।
मैं मूल रूप से ऐसा करना चाहता हूं ताकि मेरे विचार/नियंत्रक आसानी से राज्य में सेवा को बदल सकें और यह हर जगह परिलक्षित हो।
ऐसा लगता है कि मुझे निम्न की तरह कुछ करने में सक्षम होना चाहिए, लेकिन यह काम नहीं करता है (http://jsfiddle.net/aidankane/AtRVD/1/)।
एचटीएमएल
<div ng-controller="MyCtl">
<select ng-model="drawing" ng-options="d.file for d in drawings"></select>
</div>
<div ng-controller="MyOtherCtl">
{{ drawing }}
</div>
जे एस
var myApp = angular.module('myApp', []);
myApp.factory('myService', function(){
var me = {
drawings: [{'file':'a'}, {'file':'b'}]
};
// selected drawing
me.drawing = me.drawings[0];
return me;
});
function MyCtl($scope, myService){
// can do:
// $scope.mys = myService;
// and then in html ng-model="mys.drawing"
// but that seems wrong
$scope.drawings = myService.drawings;
$scope.drawing = myService.drawing;
// can I not do this? it doesn't seem to work anyway...
$scope.$watch('drawing', function(drawing){
myService.drawing = drawing;
});
}
function MyOtherCtl($scope, myService){
$scope.drawing = myService.drawing;
}
MyCtl.$inject = ['$scope', 'myService'];
MyOtherCtl.$inject = ['$scope', 'myService'];
मैं देखता हूं कि आप $ scope.d बदलने के लिए कहां देख रहे हैं, लेकिन आप मॉडल को बदल नहीं रहे हैं, चयनित आइटम बदल रहे हैं। क्या आपको चयनित आइटम परिवर्तन के लिए संभवतः निर्देश में एक हैंडलर नहीं रखना चाहिए? –
मैं निर्देशों का उपयोग करके यह कैसे करूँगा? मैंने पाया कि ngSelect निर्देश मूल रूप से मुझे वह व्यवहार देता है जो मुझे चाहिए। इस मुद्दे की मेरी समझ यह है कि यह नियंत्रक और सेवा के बीच की गति है जो समस्या है - फिर फिर मैं थोड़ा उलझन में हूं :) –
आप सही हैं, अब मैं आपके अपडेट किए गए पहेली को देखता हूं, मेरे पास एक बेहतर विचार है आप क्या कर रहे हैं आप उलझन में नहीं हैं :) –