Maison > interface Web > js tutoriel > Communication entre les composants que vous devez apprendre chaque jour dans Vue.js

Communication entre les composants que vous devez apprendre chaque jour dans Vue.js

高洛峰
Libérer: 2017-01-03 17:26:19
original
1265 Les gens l'ont consulté

Que sont les composants ?

Le composant est l'une des fonctionnalités les plus puissantes de Vue.js. Les composants peuvent étendre des éléments HTML, encapsulant du code réutilisable. À un niveau élevé, un composant est un élément personnalisé auquel le compilateur de Vue.js ajoute des fonctionnalités spéciales. Dans certains cas, les composants peuvent également prendre la forme d'éléments HTML natifs, étendus avec l'attribut is.

Utiliser le composant

Register

Comme mentionné précédemment, nous pouvons utiliser Vue.extend() pour créer un constructeur de composant :

var MyComponent = Vue.extend({
 // 选项...
})
Copier après la connexion

Pour utiliser ce constructeur comme composant, vous devez utiliser `Vue.component(tag, constructor)` **Inscription** :

// 全局注册组件,tag 为 my-component
Vue.component('my-component', MyComponent)
Copier après la connexion

Pour les noms de balises personnalisés, Vue.js n'applique pas les règles du W3C (minuscules et contenant un tiret), bien qu'il soit préférable de suivre cette règle.

Une fois le composant enregistré, il peut être utilisé dans le module de l'instance parent en tant qu'élément personnalisé . Assurez-vous d'enregistrer le composant avant d'initialiser l'instance racine :

<div id="example">
 <my-component></my-component>
</div>
 
// 定义
var MyComponent = Vue.extend({
 template: &#39;<div>A custom component!</div>&#39;
})
 
// 注册
Vue.component(&#39;my-component&#39;, MyComponent)
 
// 创建根实例
new Vue({
 el: &#39;#example&#39;
})
Copier après la connexion

s'affiche comme :

<div id="example">
 <div>A custom component!</div>
</div>
Copier après la connexion

Notez que le gabarit du composant remplace l'élément personnalisé, qui sert uniquement de point de montage. Vous pouvez utiliser l'option d'instance replace pour décider de remplacer ou non.

Enregistrement local

Il n'est pas nécessaire d'enregistrer chaque composant globalement. Vous pouvez faire en sorte que le composant soit utilisé uniquement dans d'autres composants, enregistrez-le avec l'option d'instance composants :

var Child = Vue.extend({ /* ... */ })
 
var Parent = Vue.extend({
 template: &#39;...&#39;,
 components: {
 // <my-component> 只能用在父组件模板内
 &#39;my-component&#39;: Child
 }
})
Copier après la connexion

Cette encapsulation convient également à d'autres ressources, telles que comme instructions, filtres et transitions.

Sucre syntaxique d'enregistrement

Pour simplifier les événements, vous pouvez transmettre directement l'objet options au lieu du constructeur à Vue.component() et aux options du composant. Vue.js appelle automatiquement Vue.extend() dans les coulisses :

// 在一个步骤中扩展与注册
Vue.component(&#39;my-component&#39;, {
 template: &#39;<div>A custom component!</div>&#39;
})
 
// 局部注册也可以这么做
var Parent = Vue.extend({
 components: {
 &#39;my-component&#39;: {
  template: &#39;<div>A custom component!</div>&#39;
 }
 }
})
Copier après la connexion

Problème d'option de composant

La plupart des options des constructeurs Vue peut également être utilisé dans Vue.extend(), mais il existe deux cas particuliers : data et el. Imaginez si nous passions simplement un objet comme option data à Vue.extend() : les instances partageront le même objet « data » ! Ce n'est fondamentalement pas ce que nous voulons, nous devrions donc utiliser une fonction comme option `data` et laisser cette fonction renvoyer un nouvel objet :

var data = { a: 1 }
var MyComponent = Vue.extend({
 data: data
})
Copier après la connexion

Identique à Cependant, l'option `el` doit également être une fonction lorsqu'elle est utilisée dans `Vue.extend()`.

var MyComponent = Vue.extend({
 data: function () {
 return { a: 1 }
 }
})
Copier après la connexion

Analyse de modèle

Le modèle de Vue est un modèle DOM Utilisez l'analyseur natif du navigateur au lieu d'en implémenter un vous-même. Les modèles DOM présentent certains avantages par rapport aux modèles de chaîne, mais ils présentent également le problème qu'il doit s'agir d'un fragment HTML valide. Certains éléments HTML ont des restrictions quant aux éléments qui peuvent y être placés. Restrictions courantes :

•a ne peut pas contenir d'autres éléments interactifs (tels que des boutons, des liens)

•ul et ol ne peuvent contenir que directement li
•select ne peut contenir que des options et optgroup

•table uniquement Peut contenir directement thead, tbody, tfoot, tr, caption, col, colgroup

•tr ne peut contenir directement que th et td


En pratique, ces limitations conduiront à des résultats inattendus. Bien que cela puisse fonctionner dans des cas simples, vous ne pouvez pas vous fier au résultat de l'expansion d'un composant personnalisé avant que le navigateur ne le valide. Par exemple, n'est pas un modèle valide, même si le composant my-select finit par se développer en