Appearance
Interoperabilidade dos Elementos Personalizados rutura
Visão Geral
- RUTURA: As verificações para determinar se os marcadores devem ser tratados como elementos personalizados são agora realizadas durante a compilação do modelo de marcação, e deve ser configurada através das opções do compilador ao invés da configuração do tempo de execução.
- RUTURA: O uso do atributo
is
especial está restrito apenas ao marcador<component>
reservado. - NOVO: Para suportar os casos de uso da 2.x onde
is
era usado sobre os elementos nativos para dar a volta as restrições de analise do HTML nativo, prefixamos o valor comvue:
para resolvê-lo como um componente de Vue.
Elementos Personalizados Autónomos
Se quisermos adicionar um elemento personalizado definido fora da Vue (por exemplo, usando a API de Componentes da Web), precisamos de 'instruir' a Vue à tratá-lo como um elemento personalizado. Vamos usar o seguinte modelo de marcação como um exemplo:
html
<plastic-button></plastic-button>
Sintaxe da 2.x
Na Vue 2.x, a configuração dos marcadores como elementos personalizado era feita através da Vue.config.ignoredElements
:
js
// Isto fará a Vue ignorar elemento personalizado definido fora da Vue
// (por exemplo, usando as APIs de Componentes da Web)
Vue.config.ignoredElements = ['plastic-button']
Sintaxe da 3.x
Na Vue 3.0, esta verificação é realizada durante a compilação do modelo de marcação. Para instruir o compilador à tratar <plastic-button>
como um elemento personalizado:
Se estivermos a usar uma etapa de construção: passamos a opção
isCustomElement
ao compilador do modelo de marcação da Vue. Se estivermos a usar ovue-loader
, esta deve ser passada através da opçãocompilerOptions
davue-loader
:js// na configuração da webpack rules: [ { test: /\.vue$/, use: 'vue-loader', options: { compilerOptions: { isCustomElement: tag => tag === 'plastic-button' } } } // ... ]
Se estivermos a usar a compilação de modelo de marcação em tempo real, passamos-o através
app.config.compilerOptions.isCustomElement
:jsconst app = Vue.createApp({}) app.config.compilerOptions.isCustomElement = tag => tag === 'plastic-button'
É importante notar que a configuração da execução apenas afeta a compilação de modelo de marcação da execução - não afetará os modelos de marcação pré-compilados.
Elementos Embutidos Personalizados
A especificação dos Elementos Personalizados fornece uma maneira de usar os elementos personalizados como Elemento Embutido Personalizado adicionado o atributo is
à um elemento embutido:
html
<button is="plastic-button">Click Me!</button>
O uso da Vue do atributo especial is
era simular o que o atributo nativo faz antes que fosse tornado universalmente disponível nos navegadores. No entanto, na 2.X era interpretado como desenhar um componente de Vue com o nome plastic-button
. Isto bloqueia o uso nativo do Elemento Embutido Personalizado mencionado acima.
Na 3.0, estamos limitando o tratamento especial da Vue do atributo is
apenas ao marcador <component>
:
Quando usado no marcador
<component>
reservado, comportar-se-á exatamente como na 2.x;Quando usado sobre os componentes normais, comportar-se-á tal como um atributo normal:
html<foo is="bar" />
- Comportamento da 2.x: desenha o componente
bar
. - Comportamento da 3.x: desenha o componente
foo
e passando o atributois
.
- Comportamento da 2.x: desenha o componente
Quando usado sobre os elementos simples, será passado à chamada de
createElement
como o atributois
, e também será desenhado como um atributo nativo. Isto suporta o uso dos elementos embutidos personalizados:html<button is="plastic-button">Click Me!</button>
Comportamento da 2.x: desenha o componente
plastic-button
.Comportamento da 3.x: desenha um botão nativo chamado:
jsdocument.createElement('button', { is: 'plastic-button' })
Opção da Construção de Migração: COMPILER_IS_ON_ELEMENT
Prefixo vue:
para Solucionar a Analise do Modelo de Marcação no DOM
Nota: esta seção apenas afeta casos onde os modelos de marcação da Vue são diretamente escritos no HTML da página. Quando usamos os modelos de marcação no DOM, o modelo de marcação está sujeito às regras de analise de HTML nativa. Alguns elementos de HTML, tal como
<ul>
,<ol>
,<table>
e<select>
têm restrições sobre quais elementos podem aparecer dentro deles, e alguns elementos tais como<li>
,<tr>
, e<option>
apenas podem aparecer dentro de outros certos elementos.
Sintaxe da 2.x
Na Vue 2, recomendados dar a volta a estas restrições usando o atributo is
sobre um marcador nativo:
html
<table>
<tr is="blog-post-row"></tr>
</table>
Sintaxe da 3.x
Com a mudança de comportamento do is
, um prefixo vue:
agora é necessário para resolver o elemento como um componente de Vue:
html
<table>
<tr is="vue:blog-post-row"></tr>
</table>
Estratégia de Migração
Substituir
config.ignoredElements
ou com acompilerOptions
davue-loader
(com a etapa de construção) ou com aapp.config.compilerOptions.isCustomElement
(com a compilação do modelo de marcação em tempo real).Mudar todos os marcadores que são
<component>
com o uso dois
para<component is="...">
(para os modelos de marcação do componente de ficheiro único) ou o prefixar comvue:
(para os modelos de marcação no DOM).