के भीतर नियंत्रक को स्थानांतरित करते समय तत्व/स्कोप स्थिति बनाए रखें एक कोणीय अनुप्रयोग में, मैं एक तत्व को डीओएम पेड़ के एक हिस्से से दूसरे भाग में स्थानांतरित करना चाहता हूं, बिना किसी तत्व के नियंत्रक/एस को पुनः लोड किए बिना।डीओएम
मैं एक सरल plunker बनाया है वर्णन करने के लिए: http://plnkr.co/edit/sqBRM3ZQ5G9xpiNd1MXm?p=preview
इस plunker में, केवल डेटा बनाए रखे जाने की Toggler राज्य है, लेकिन वास्तविकता में यह डेटा की एक बहुत बड़ी राशि है, जो एक आवश्यकता हो सकती है हो सकता है शुरू करने के लिए बहुत सारे प्रयास।
मैं क्या करना चाहता हूं कि डायरेक्टिव 1 से निर्देश 1 में टेम्पलेट 1 को स्थानांतरित करने में सक्षम होना है, लेकिन मैं टॉगलर की स्थिति को बनाए रखना चाहता हूं। इस परिदृश्य में, यदि आप इसे हरा बनाने के लिए टॉगलर पर क्लिक करते हैं, और "सूची 1 से 2 में स्थानांतरित करें" पर क्लिक करें, तो यह इसे निर्देश 2 पर ले जायेगा लेकिन रंग को लाल रंग में रीसेट कर देगा।
इसे रोकने के लिए, मैं केवल कोणीय को सूचित किए बिना तत्व को स्थानांतरित कर सकता हूं, लेकिन यह स्पष्ट रूप से एक टूटी हुई एप्लिकेशन स्थिति बनाता है।
मैं सिर्फ नए गुंजाइश के लिए पुराने दायरे से नियंत्रक जाने के बारे में सोचा था, लेकिन मुझे लगता है कि इस बंद के समस्याओं के कारण के रूप में पुराने नियंत्रक वर्ष तत्व डोम आदि में नहीं रह गया है जो संदर्भित किया जा सकता है
क्या इस समस्या को हल करने का कोई अच्छा तरीका है?
कुछ कोड जोड़ने क्योंकि StackOverflow ऐसा करना आवश्यक हो, लेकिन इसके बजाय plunker का संदर्भ लें: दृश्य के साथ
angular.module('app').controller('bodyController', ['$element', function ($element) {
this.contents1 = [{
path: 'template1.html'
}, {
path: 'template2.html'
}];
this.contents2 = [{
path: 'template3.html'
}, {
path: 'template4.html'
}];
this.move12 = function() {
this.contents2.push(this.contents1.pop());
};
this.move21 = function() {
this.contents1.push(this.contents2.pop());
};
this.naiveMove12 = function() {
var $elem = $($element);
$elem.find('container-list:eq(0) > div').last()
.appendTo($elem.find('container-list').eq(1));
};
this.naiveMove21 = function() {
var $elem = $($element);
$elem.find('container-list:eq(1) > div').last()
.appendTo($elem.find('container-list').eq(0));
};
this.logScope = function() {
var $elem = $($element);
[].forEach.call($elem.find('container-list'), function (elem, idx) {
console.log(idx + ': ', angular.element(elem).isolateScope().containerListCtrl);
});
};
}]);
सामान ले जाने के बजाय, क्या आपके पास सिर्फ एक सिंगलटन कारखाने में डेटा नहीं हो सकता है। उस फैक्ट्री का उपयोग इवेंट एग्रीगेटर के रूप में भी करें। फिर जब आप डेटा ले जाना चाहते हैं, तो आप इसे सरल से हटा दें और इसे दूसरे में लोड करें। किसी भी राज्य को घटना के साथ भेजा जा सकता है। यदि आप विभिन्न टेम्पलेट्स को लोड करना चाहते हैं तो आप '$ टेम्पलेटप्रदाता 'और' $ संकलन' का उपयोग कर सकते हैं। –
डेटा कैश को $ rootScope में लोड करने के बाद, आपके पास अपने सभी नियंत्रकों में इसका उपयोग होगा। मैंने आपके प्लंकर को रूटस्कोप जोड़ने की कोशिश की, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा था। यदि आप इस दृष्टिकोण में रुचि रखते हैं तो मैं आपको इसके लिए कोड दिखा सकता हूं। – jjbskir
सोचें कि मैंने नीचे आपके प्रश्न का उत्तर दिया है। काम करने के समाधान के लिए plunkr देखें। यदि आपके कोई प्रश्न हैं या यदि मैंने कुछ भी गलत समझा है तो कृपया मुझे बताएं। धन्यवाद! – jbmilgrom