Зміни у взаємодії користувацьких елементів несумісно
Огляд
- НЕСУМІСНО: Перевірка того, чи слід розглядати теги як користувацькі елементи, тепер виконується під час компіляції шаблону, і її слід налаштовувати за допомогою опцій компілятора, а не конфігурації під час виконання в реальному часі.
- НЕСУМІСНО: Використання спеціального атрибута
isобмежено лише зарезервованим тегом<component>. - НОВЕ: Для підтримки випадків використання версії 2.x, коли
isвикористовується на нативних елементах для обходу обмежень нативного парсингу HTML, додайте до значення префіксvue:, щоб відобразити його як компонент Vue.
Автономні користувацькі елементи
Якщо ми хочемо додати користувацький елемент, визначений за межами Vue (наприклад, за допомогою API веб-компонентів), нам потрібно "вказати" Vue розглядати його як користувацький елемент. Давайте розглянемо для прикладу наступний шаблон.
<plastic-button></plastic-button>2.x Синтаксис
У версії Vue 2.x налаштування тегів як користувацьких елементів здійснювалося за допомогою Vue.config.ignoredElements:
// Це змусить Vue ігнорувати користувацький елемент, визначений за межами Vue
// (наприклад, за допомогою API веб-компонентів)
Vue.config.ignoredElements = ['plastic-button']3.x Синтаксис
У версії Vue 3.0 ця перевірка виконується під час компіляції шаблону. Вказати компілятору вважати <plastic-button> користувацьким елементом:
Передайте опцію
isCustomElementкомпілятору шаблону Vue на етапі збірки. Якщо ви використовуєтеvue-loader, це має бути передано через опціюcompilerOptionsуvue-loader:js// у конфігурації webpack rules: [ { test: /\.vue$/, use: 'vue-loader', options: { compilerOptions: { isCustomElement: tag => tag === 'plastic-button' } } } // ... ]Якщо ви використовуєте компіляцію шаблону на льоту, передайте його через
app.config.compilerOptions.isCustomElement:jsconst app = Vue.createApp({}) app.config.compilerOptions.isCustomElement = tag => tag === 'plastic-button'Важливо зазначити, що конфігурація часу виконання впливає лише на компіляцію шаблонів під час виконання - вона не впливає на попередньо скомпільовані шаблони.
Індивідуальні вбудовані елементи
Специфікація користувацьких елементів надає можливість використовувати користувацькі елементи як Користувацькі вбудовані елементи, додавши атрибут is до вбудованого елемента:
<button is="plastic-button">Натисни мене!</button>Використання спеціального атрибута is у Vue імітувало те, що робить рідний атрибут до того, як він став загальнодоступним у браузерах. Однак у версії 2.x його було сприйнято як рендеринг компонента Vue з назвою plastic-button. Це блокує використання вбудованого користувацького елемента, згаданого вище.
У версії 3.0 ми обмежуємо спеціальне поводження Vue з атрибутом is лише з тегом <component>.
При використанні у зарезервованому тегу
<component>він поводитиметься так само як і у версії 2.x;При використанні зі звичайними компонентами він поводитиметься як звичайний атрибут:
html<foo is="bar" />- Поведінка 2.x: рендерить компонент
bar. - Поведінка 3.x: рендерить компонент
fooі передає атрибутis.
- Поведінка 2.x: рендерить компонент
При використанні на простих елементах він буде переданий до виклику
createElementяк атрибутis, а також відрендерений як власний атрибут. Це підтримує використання користувацьких вбудованих елементів.html<button is="plastic-button">Натисни мене!</button>Поведінка 2.x: рендерить компонент
plastic-button.Поведінка 3.x: рендерить нативну кнопку за викликом
jsdocument.createElement('button', { is: 'plastic-button' })
Стяг збірки міграції: COMPILER_IS_ON_ELEMENT
vue: Префікс для обхідних шляхів парсингу шаблонів In-DOM
Примітка: цей розділ стосується лише тих випадків, коли шаблони Vue безпосередньо вписані в HTML сторінки. Деякі елементи HTML, такі як
<ul>,<ol>,<table>та<select>, мають обмеження на те, які елементи можуть з’являтися всередині них, а деякі елементи, такі як<li>,<tr>та<option>, можуть лише з'являються всередині певних елементів.
2.x Синтаксис
У версії Vue 2 ми рекомендували обходити ці обмеження, використовуючи атрибут is у нативному тегу:
<table>
<tr is="blog-post-row"></tr>
</table>3.x Синтаксис
Зі зміною поведінки is тепер потрібен префікс vue:, щоб розпізнати елемент як компонент Vue:
<table>
<tr is="vue:blog-post-row"></tr>
</table>Стратегія міграції
Замініть
config.ignoredElementsнаcompilerOptionsуvue-loader(на етапі збірки) абоapp.config.compilerOptions.isCustomElement(з компіляцією шаблону на льоту)Змініть усі не-теги
<component>з використаннямisна<component is="...">(для шаблонів SFC) або додайте до них префіксvue:(для шаблонів in-DOM).