Cet article présente principalement les différences entre extend, composant, mixins et extends dans Vue. Il est très bon et a une valeur de référence. Les amis dans le besoin peuvent s'y référer
nouvelle Vue. ( ), composant
Nous nous mettons d'abord d'accord sur un objet d'options baseOptions, qui sera utilisé dans le code suivant.
let options = { template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>', data: function () { return { firstName: 'Walter', lastName: 'White', alias: 'Heisenberg' } }, created(){ console.log('onCreated-1'); } };
nouveau Vue() source :vue/src/core/instance/index.js
Instancier un composant.
new Vue(baseOptions); // -> onCreated-1 component source:vue/src/core/global-api/assets.js
Vue.component est utilisé pour enregistrer ou obtenir Méthode des composants globaux, sa fonction est d'enregistrer (nom) le constructeur d'instance étendu généré par Vue.extend en tant que composant. Les composants enregistrés globalement peuvent être utilisés dans toutes les instances Vue construites après l'instruction d'enregistrement du composant
Vue.component('global-component', Vue.extend(baseOptions)); //传入一个选项对象(自动调用 Vue.extend),等价于上行代码. Vue.component('global-component', baseOptions); // 获取注册的组件(始终返回构造器) var MyComponent = Vue.component('my-component')
extend source:vue/src /core/global-api/extend.js
Vous pouvez étendre le constructeur Vue pour créer un constructeur de composants réutilisable avec des options prédéfinies. L'option mixins accepte un tableau de mixins. Ces objets d'instance mixin peuvent contenir des options tout comme les objets d'instance normaux, et ils seront fusionnés logiquement en utilisant les mêmes options dans Vue.extend() .let BaseComponent = Vue.extend(baseOptions); //基于基础组件BaseComponent,再扩展新逻辑. new BaseComponent({ created(){ //do something console.log('onCreated-2'); } //其他自定义逻辑 }); // -> onCreated-1 // -> onCreated-2
étend
C'est similaire aux mixins, la différence est que les options du composant lui-même seront supérieures à la source composant à étendre. La priorité.C'est ce que dit le document officiel En plus de la priorité, il peut y avoir uniquement des types qui acceptent les paramètres.new Vue({ mixins: [baseOptions], created(){ //do something console.log('onCreated-2'); } //其他自定义逻辑 }); // -> onCreated-1 // -> onCreated-2
D'après les résultats, les trois méthodes peuvent répondre aux exigences, mais les formes sont différentes
Vue.extendVue.extend crée simplement. un constructeur, il s'agit de créer des composants réutilisables.new Vue({ extends: baseOptions, created(){ //do something console.log('onCreated-2'); } //其他自定义逻辑 }); // -> onCreated-1 // -> onCreated-2
Option stratégie de fusion d'objets Vue. config.optionMergeStrategies
Les objets d'option mentionnés ci-dessus sont fusionnés selon une certaine stratégie dans mergeOptions.
Imprimez Vue.config.optionMergeStrategies, vous verrez l'optionMergeStrategies par défaut comme suit :
mergeHook sous-composant Les événements du cycle de vie du composant parent seront fusionnés dans un tableau. Le composant parent vient en premier et le composant enfant en dernier.
mergeAssets
Le délégué prototype est utilisé dans la méthode de fusion mergeAssets. Il va d'abord fusionner les attributs du composant parent. Les attributs sont placés sur la chaîne prototype du nouvel objet créé. attributs dans le nouvel objet
Vue.component enregistre les composants globaux pour plus de commodité Vue.extend crée le constructeur du composant, afin de réutiliser les
function extend (to, _from) { for (var key in _from) { to[key] = _from[key]; } return to } function mergeAssets (parentVal, childVal) { var res = Object.create(parentVal || null); return childVal ? extend(res, childVal) : res }
mixins, extends afin d'étendre
Articles associés :
À propos de ce problème de pointage dans vue (tutoriel détaillé)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!