gpt4 book ai didi

javascript - VueJs 操作内联模板并重新初始化它

转载 作者:技术小花猫 更新时间:2023-10-29 12:43:09 26 4
gpt4 key购买 nike

这个问题类似于VueJS re-compile HTML in an inline-template component还有How to make Vue js directive working in an appended html element

不幸的是,该问题中的解决方案不能再用于当前的 VueJS 实现,因为 $compile 已被删除。

我的用例如下:

我必须使用第三方代码来操作页面并随后触发事件。现在,在该事件被触发后,我想让 VueJS 知道它应该重新初始化当前的 DOM。

(用纯javascript编写的第三方允许用户向页面添加新的小部件)

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)

最佳答案

经过进一步调查,我联系了 VueJs 团队并获得了 feedback以下方法可能是一个有效的解决方案:

/**
* Content change handler
*/
function handleContentChange() {
const inlineTemplates = document.querySelector('[inline-template]');
for (var inlineTemplate of inlineTemplates) {
processNewElement(inlineTemplate);
}
}


/**
* Tell vue to initialize a new element
*/
function processNewElement(element) {
const vue = getClosestVueInstance(element);
new Vue({
el: element,
data: vue.$data
});
}

/**
* Returns the __vue__ instance of the next element up the dom tree
*/
function getClosestVueInstance(element) {
if (element) {
return element.__vue__ || getClosestVueInstance(element.parentElement);
}
}

可以在下面的fiddle试试

关于javascript - VueJs 操作内联模板并重新初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43805124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com