#vue.js #vuejs3
Вопрос:
Я пытаюсь избежать того, чтобы Vue компилировал простые HTML-теги внутри корневого элемента. Вот пример кода:
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.5/vue.global.js"></script>
<script type="application/javascript" src="my_component.js">
<script>const app = Vue.createApp({});</script>
<div id="app">
<my-component></my-component>
...
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
...
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
...
</div>
<script>app.mount("#app");</script>
</body>
Vue 3 компилирует все элементы (простые HTML-элементы) в корневых элементах для поиска компонентов Vue, но это может быть проблемой с загрузкой, если страница очень большая и содержит не так много компонентов Vue.
Я пытался сделать что-то вроде этого:
<script>app.config.isCustomElement = tag => tag.startsWith('div') || tag.startsWith('span');</script>
но это не игнорирует простые HTML-теги, такие как div и span.
Еще один вариант, который мне надоел, был:
...
<div id="app">
<my-component></my-component>
...
<div v-pre>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
...
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
...
</div>
</div>
...
Это тоже было не так удачно.
Может ли кто-нибудь помочь мне с этой проблемой?
Ответ №1:
Некоторое время назад у меня было такое же требование. Сначала я добавил дополнительный атрибут для каждого компонента Vue, как это
<my-component [load-vue]></my-component>
А затем я инициализировал каждый компонент следующим сценарием на странице. Я не уверен, что это работает для вас, но это может дать вам представление о том, как это сделать.
document.querySelectorAll("[load-vue]").forEach(el => {
new Vue({
el: el
});
});
Предупреждение: Это работает в Vue 2, не уверен, что в Vue 3
Комментарии:
1. Спасибо за ваш ответ, я этого не искал, но я понял вашу идею. Он работает с vue 2, но не с vue 3. Вы должны создать новый экземпляр для каждого компонента, и в нем есть несоответствия. Магазин Vue не работает, если вы хотите взаимодействовать между компонентами, но в разных приложениях. Но этот ответ может помочь кому-то другому, вот почему я поставил ему лайк.