पर $ संसाधन से प्राप्त मूल्य को अपडेट नहीं कर रहा है मुझे कस्टम निर्देशों के साथ कोई समस्या है जो मुझे पागल कर रहा है। मैं निम्नलिखित कस्टम बनाने के लिए कोशिश कर रहा हूँ (विशेषता) के निर्देश:
angular.module('componentes', [])
.directive("seatMap", function(){
return {
restrict: 'A',
link: function(scope, element, attrs, controller){
function updateSeatInfo(scope, element){
var txt = "";
for (var i in scope.seats)
txt = txt + scope.seats[i].id + " ";
$(element).text("seat ids: "+txt);
}
/*
// This is working, but it's kind of dirty...
$timeout(function(){updateSeatInfo(scope,element);}, 1000);
*/
scope.$watch('seats', function(newval, oldval){
console.log(newval, oldval);
updateSeatInfo(scope,element);
});
}
}
});
यह "विशेषता-प्रकार" निर्देश (seatMap कहा जाता है) (एक थिएटर के लिए, उदाहरण के लिए) सीट आईडी की एक सूची दिखाने के लिए कोशिश कर रहा है जो मैं सर्वर से $ संसाधन सेवा (नीचे कोड देखें) के माध्यम से एक div (तत्व) में लाऊंगा।
मैं इसे उपयोग कर रहा हूँ इस सरल आंशिक एचटीएमएल के साथ:
<div>
<!-- This is actually working -->
<ul>
<li ng-repeat="seat in seats">{{seat.id}}</li>
</ul>
<!-- This is not... -->
<div style="border: 1px dotted black" seat-map></div>
</div>
और यह नियंत्रक जो गुंजाइश लोड कर रहा है है:
function SeatsCtrl($scope, Seats) {
$scope.sessionId = "12345";
$scope.zoneId = "A";
$scope.seats = Seats.query({sessionId: $scope.sessionId, zoneId: $scope.zoneId});
$scope.max_seats = 4;
}
कहाँ "सीटें" $ का उपयोग कर एक साधारण सेवा है संसाधन सर्वर से एक JSON लाने के लिए
angular.module('myApp.services', ['ngResource'])
.factory('Seats', function($resource){
return $resource('json/seats-:sessionId-:zoneId.json', {}, {});
})
;
app.js (asientos_libres.html आंशिक मैं ख है है een का प्रयोग करके):
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'componentes']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/view1', {templateUrl: 'partials/asientos_libres.html', controller: SeatsCtrl});
$routeProvider.otherwise({redirectTo: '/view1'});
}]);
समस्या है, भले ही मैं एक "गुंजाइश $ घड़ी।" निर्देश का लिंक समारोह में स्थापित किया ताकि गुंजाइश जांच कर सकते हैं "सीटों" विशेषता को अपडेट करने बदली है या नहीं आईडी की सूची, यह इस समय काम नहीं कर रहा है $ scope.seats नियंत्रक में बदल रहा है (जब हम "क्वेरी" कहते हैं)।
आप कोड में देख सकते हैं, मैं $ टाइमआउट का उपयोग कर "updateSeatInfo" के प्रक्षेपण में देरी करने का प्रयास किया है, लेकिन मुझे डर है कि यह अब तक का सबसे स्मार्ट समाधान नहीं है हूँ ...
मैं भी करने की कोशिश की JSON अनुरोध न करने के लिए, लेकिन $ scope.seats में हार्ड-कोडित शब्दकोश का उपयोग करें और यह काम करता है, इसलिए ऐसा लगता है कि यह सिंक्रनाइज़ेशन का विषय है।
नोट: अद्यतनSeatInfo केवल एक परीक्षण कार्य है, वास्तविक फ़ंक्शन जिसका मैं उपयोग करूंगा वह थोड़ा अधिक जटिल है।
इससे निपटने के बारे में कोई विचार?
बहुत पहले धन्यवाद!
संपादित करें 1: जोड़ा गया app.js, जहां मैं SeatsCtrl को कॉल करने के लिए राउटर का उपयोग कर रहा हूं, सलाह के लिए सुप्र के लिए धन्यवाद। हालांकि, मुझे अभी भी एक ही समस्या है।
संपादित करें 2: हल किया गया! (?) ठीक है! ऐसा लगता है कि मुझे एक समाधान मिला, जो कि सबसे अच्छा नहीं हो सकता है, लेकिन यह ठीक से काम कर रहा है! :) जहां तक मैं यहां देख सकता था http://docs.angularjs.org/api/ng.$timeout, हम $ timeout (setTimeout पर एक रैपर) का उपयोग कर देरी के साथ कर सकते हैं! यह बहुत अच्छा है क्योंकि हम $ timeout के अंदर हमारे कोड के निष्पादन में कृत्रिम रूप से देरी नहीं कर रहे हैं, लेकिन हम निर्देश बना रहे हैं कि जब तक एसिंक्रोनस अनुरोध समाप्त नहीं हो जाता है।
आशा है कि यह भी लंबे समय से प्रतीक्षा अनुरोधों के लिए काम करेंगे ...
कोई इसे ठीक करने के लिए एक बेहतर तरीका जानता है, तो कृपया बताएं!
सावधानी का एक शब्द: इस तरह की गहरी तुलना में प्रदर्शन लागत है। यह एक समस्या है जब एक वस्तु के बजाए वस्तुओं का संग्रह गहराई से देखता है, लेकिन यह ध्यान में रखना महत्वपूर्ण है। –