इस सवाल VueJS re-compile HTML in an inline-template component के समान है और यह भी करने के लिए How to make Vue js directive working in an appended html elementVueJs इनलाइन टेम्पलेट में हेरफेर और reinitialize यह
दुर्भाग्य है कि प्रश्न में समाधान $compile
के रूप में वर्तमान VueJS कार्यान्वयन के लिए अब और नहीं किया जा सकता हटा दिया गया था है।
मेरे उपयोग के मामले निम्नलिखित है:
मैं जो पेज manipulates और बाद में एक गतिविधि सक्रिय तीसरे पक्ष के कोड का उपयोग करने के लिए है। अब उस घटना के बाद निकाल दिया गया था, मैं वीयूजेएस को यह बताना चाहता हूं कि इसे वर्तमान डोम को फिर से शुरू करना चाहिए।
(तृतीय पक्ष जो शुद्ध जावास्क्रिप्ट में लिखा है एक उपयोगकर्ता एक पेज में नए विजेट जोड़ लिए अनुमति देता है)
https://jsfiddle.net/5y8c0u2k/
एचटीएमएल
<div id="app">
<my-input inline-template>
<div class="wrapper">
My inline template<br>
<input v-model="value">
<my-element inline-template :value="value">
<button v-text="value" @click="click"></button>
</my-element>
</div>
</my-input>
</div>
जावास्क्रिप्ट - VueJS 2.2
Vue.component('my-input', {
data() {
return {
value: 1000
};
}
});
Vue.component('my-element', {
props: {
value: String
},
methods: {
click() {
console.log('Clicked the button');
}
}
});
new Vue({
el: '#app',
});
// Pseudo code
setInterval(() => {
// Third party library adds html:
var newContent = document.createElement('div');
newContent.innerHTML = `<my-element inline-template :value="value">
<button v-text="value" @click="click"></button>
</my-element>`; document.querySelector('.wrapper').appendChild(newContent)
//
// How would I now reinialize the app or
// the wrapping component to use the click handler and value?
//
}, 5000)
क्या नया कोड पृष्ठ पर कहीं भी दिखा सकता है? –
हां ऐसे कई स्थान हैं जो गतिशील रूप से उत्पन्न होते हैं। मुझे एक समाधान मिला लेकिन यह एक हैक की तरह अधिक महसूस करता है: https://jsfiddle.net/9ukmy0k0/ – jantimon
हैकनेस अपरिहार्य है: आप वू के साथ अनुबंध का उल्लंघन कर रहे हैं कि यह डीओएम को नियंत्रित करेगा। –