2014-04-27 5 views
38

मैं एक सेवा है जो रिटर्न चित्र URL, और यह निम्नलिखित कोड का उपयोग कर कहा जाता है सीएसएस पृष्ठभूमि: मैं एनजी के साथ एक छवि के लिए इस्तेमाल किया मेरे विचार परAngularJS - एनजी शैली को अपडेट नहीं करता संपत्ति

angular.forEach(results, function (item) { 
    item.img = "/images/searchItem.jpg"; 
    $http.post("https://my.api.com/?id=" + item.id).success(
      function (url) { 
       item.img = url; 
      }); 
}); 

-src विशेषता यह है कि पूरी तरह से तो जैसे काम किया:

<span ng-style="{'background':'transparent url({{item.img}})'}"></span> 
:

<img ng-src="{{item.img}}"> 

तो मैं बजाय एक स्पैन पर पृष्ठभूमि छवि का उपयोग करने का निर्णय लिया है

अब प्रवाह केवल पहली बार चलाने पर काम करता है, के बाद कि मैं (कंसोल में) देख सकते हैं निम्नलिखित एचटीएमएल

<span ng-style="{'background':'transparent url(http://expertsimages.liveperson.com/images/rating/rate10.gif)'}" style="background-image: url(https://fb.lp-chat.com/images/searchItem.jpg); background-color: transparent; background-position: initial initial; background-repeat: initial initial;"></span> 

जो इंगित करता है कि चर अद्यतन, तथापि एचटीएमएल अपनी आरंभिक अवस्था पर अब भी है।

मैंने पोस्ट सफलता पर आवेदन/डाइजेस्ट को कॉल करने का प्रयास किया, लेकिन $ (जो समझ में आता है) में पहले से ही डाइजेस्ट त्रुटि मिली। संघर्ष की बात यह है कि एक सामान्य पचाने के बाद (उदाहरण के लिए अन्य यूई परिवर्तनों पर) शैली लागू की जा रही है और मुझे सही छवि दिखाई दे रही है।

मुझे यहां क्या याद आ रही है?

अद्यतन: मैं एक JS fiddle कि इस मुद्दे को दर्शाता बना लिया है ... मेरे लिए कोणीय में एक बग की तरह दिखता है।

उत्तर

76

मैं भी इसमें भाग गया। {{ }} के साथ मूल्यांकन करने के बजाय, स्ट्रिंग + मान concatenation का उपयोग करें।

यह काम करेगा: [। शैली *]

<span ng-style="{'background':'transparent url(' + item.img + ')'}"></span>)

यहाँ अपने fiddle

+0

क्या आप समझा सकते हैं कि यह क्यों काम नहीं करता है? –

+0

मुझे लगता है कि यह सामान्य है जो इस मामले में गहरी घड़ी लागू नहीं कर रहा है। – Disfigure

+0

उदाहरण: पृष्ठभूमि रंग अभी भी वही है, भले ही उसका मान बदलता है, लेकिन यदि आप रंग संपत्ति जोड़ते हैं तो इसे लागू किया जाएगा क्योंकि पहले स्तर पर एक नई संपत्ति जोड़ दी गई है। – Disfigure

6

कहाँ आप वर्तमान में अपने दायरे चर अद्यतन कर रहे हैं, आपके विचार अपने दायरे को अद्यतन धक्का और बाद में करने के लिए एक $timeout कॉल के भीतर इस लपेट, यह प्रभावी रूप से पहले से ही प्रगति संघर्ष में डाइजेस्ट से परहेज अगले digest को अद्यतन टक्कर होगी :

$timeout(function(){ 
     $scope.var = value; 
    }); 

This question thread आप apply बनाम timeout के बारे में कुछ उपयोगी जानकारी दे सकते हैं आदि

+1

उत्तर के लिए धन्यवाद, मैं इसे देखता हूं –

+2

मैंने टाइमआउट की कोशिश की, हालांकि इसने समस्या को ठीक नहीं किया ... मैंने 10 सेकेंड देरी की भी कोशिश की, वें एन तत्व का निरीक्षण किया। 10 सेकंड के बाद एनजी-स्टाइल विशेषता अपडेट की गई, हालांकि दृश्य वही रहा। कोई नया विचार? –

+1

यह पूरी तरह से काम करता है। टाइमआउट काम करने के तरीके के कारण आपको वास्तव में किसी भी समय देरी की आवश्यकता नहीं होती है। धन्यवाद! – charliebeckwith

11

क्योंकि कोणीय सामग्री के मूल्यांकन यह काम नहीं करता है केवल एक बार एक ब्रैकेट का टी और वह स्ट्रिंग का पता नहीं लगाता है जिसे आप उस स्ट्रिंग के अंदर बांधना चाहते हैं।

आप फिर भी इस तरह के रूप में अपने निर्देश बना सकते हैं:

app.directive('backImg', function(){ 
    return function(scope, element, attrs){ 
     attrs.$observe('backImg', function(value) { 
      element.css({ 
       'background': 'transparent url(' + value +')' 
      }); 
     }); 
    }; 
}); 

और उसके बाद इस तरह अपने टेम्पलेट में इसका इस्तेमाल करते हैं:

<div ng-if="vis" class="container" back-img="{{imgSrc}}"></div> 

मैं अपने बेला अद्यतन किया है और यह ठीक काम करने लगता है http://jsfiddle.net/dS4pB/3/

0

आपको शायद एक ही समस्या का सामना करना पड़ रहा है जिसे मैंने हाल ही में सामना किया और एनजी-बाइंड का उपयोग करके हल किया।

जांच जवाब इस सवाल में विस्तार से बताया:

AngularJS : Why ng-bind is better than {{}} in angular?

एक बार मैं एनजी-बाँध मेरी innerHTML ठीक से अद्यतन किया गया है इस्तेमाल किया।

-1

कोणीय 2 ऐसा करने का एक मिठाई भी तरह से, है = "का मान"

की एक काम संस्करण है
<span [style.background-color]="transparent" [style.background-image]="item.img"></span> 
+1

डीबगिंग के घंटे बचाए हैं क्योंकि प्रश्न वास्तव में उपयोगी नहीं है क्योंकि प्रश्न एनजी 1 के लिए है ... – RPDeshaies

+0

@ आरपीडीशाइज़ शायद, लेकिन जैसा कि एंगुलर 2 में से अधिक लाभ प्राप्त होता है, यह सवाल अभी भी संभावित रूप से उन लोगों के लिए शीर्ष Google परिणाम होगा जो इन उत्तरों की तलाश में हैं नया ढांचा –

संबंधित मुद्दे