kwestia ta jest podobna do VueJS re-compile HTML in an inline-template component a także How to make Vue js directive working in an appended html elementVueJs manipulować szablon inline i ponownie zainicjować to
Niestety rozwiązanie w tej kwestii nie może być stosowany już dla bieżącej realizacji VueJS jako $compile
został usunięty.
Moje przypadek użycia jest następujący:
muszę użyć kodu osobie trzeciej, która manipuluje stronę i pożary zdarzenie później. Teraz po wystrzeleniu tego wydarzenia chciałbym poinformować VueJS o tym, że powinien on ponownie zainicjować bieżący DOM.
(Osoba trzecia, która jest napisany w czystym JavaScript pozwala użytkownikowi na dodanie nowych elementów interfejsu na stronie)
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)
Czy nowy kod może pojawić się w dowolnym miejscu na stronie? –
Tak, istnieje wiele lokalizacji, które są generowane dynamicznie. Znalazłem rozwiązanie, ale wygląda to bardziej jak włamanie: https://jsfiddle.net/9ukmy0k0/ – jantimon
Hackiness jest nieunikniony: naruszasz umowę z Vue, że będzie kontrolować DOM. –