bu soru VueJS re-compile HTML in an inline-template component benzer ve aynı zamanda Maalesef bu soruya çözüm $compile
gibi güncel VueJS uygulanması için artık kullanılamazVueJs satır içi şablonu manipüle ve
How to make Vue js directive working in an appended html element kaldırıldı etmektir yeniden başlatmak.
Benim kullanım durumu şudur:
Ben sayfasını yöneten ve sonrasında bir etkinliği tetikleyen üçüncü şahıs kodu kullanmak zorunda. Şimdi bu olaydan sonra VueJS'in mevcut DOM'yi yeniden başlatması gerektiğini bilmesini istiyorum.
(saf javascript ile yazılmış üçüncü parti bir kullanıcının sayfaya yeni widget'lar eklemek için izin verir)https://jsfiddle.net/5y8c0u2k/
HTML
<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>
JavaScript - 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)
Yeni kod sayfada kesinlikle herhangi bir yer gösterebilir mi? –
Evet, dinamik olarak oluşturulan birden çok konum var. Bir çözüm buldum ama bir hack gibi daha fazla hissediyor: https://jsfiddle.net/9ukmy0k0/ – jantimon
Korsanlık kaçınılmaz: sözleşmeyi DOM ile kontrol edecek olan Vue ile ihlal ediyorsunuz. –