vue 对象继承_Vue2.0中组件的继承与扩展是什么

Vue2.0中组件的继承与扩展是什么

发布时间:2020-12-07 14:04:09

来源:亿速云

阅读:100

作者:小新

小编给大家分享一下Vue2.0中组件的继承与扩展是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、slot

1.默认插槽和匿名插槽

slot用来获取组件中的原内容,此方式用于父组件向子组件传递“标签数据”。有的时候为插槽提供默认的内容是很有用的,例如,一个 组件可能希望这个按钮的默认内容是“如果没有原内容,则显示该内容”,但是同时允许用户覆写为别的内容。

180812

welcome to xiamen

如果没有原内容,则显示该内容// 默认插槽

var vm=new Vue({

el:'#itany',

components:{

'my-hello':{

template:'#hello'

}

}

});

2.具名插槽

有些时候我们需要多个插槽, 元素有一个特殊的特性:name。这个特性可以用来定义额外的插槽:

  • aaa
  • bbb
  • ccc
  1. 111
  2. 222
  3. 333
welcome to xiamen

var vm=new Vue({

el:'#itany',

components:{

'my-hello':{

template:'#hello'

}

}

});

二、mixins

1.mixins简介

混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。mixins 选项接受一个混合对象的数组。

2.mixins用途

一般有两种用途:

1、在你已经写好了构造器后,需要增加方法或者临时的活动时使用的方法,这时用混入会减少源代码的污染。

2、很多地方都会用到的公用方法,用混入的方法可以减少代码量,实现代码重用。

例如下面的例子:实现每次数据变化时都能够在控制台打印出提示:"数据发生变化"

Mixins


num:{{ num }}

增加数量

var addLog = { //额外临时加入时,用于显示日志

updated: function () {

console.log("数据发生变化,变化成" + this.num + ".");

}

}

Vue.mixin({// 全局注册一个混入,影响注册之后所有创建的每个 Vue 实例

updated: function () {

console.log("我是全局的混入")

}

})

var app = new Vue({

el: '#app',

data: {

num: 1

},

methods: {

add: function () {

this.num++;

}

},

updated() {

console.log("我是原生的update")

},

mixins: [addLog]//混入

})

3.mixins的调用顺序

上例说明了:从执行的先后顺序来说,混入对象的钩子将在组件自身钩子之前调用,如果遇到全局混入(Vue.mixin),全局混入的执行顺序要前于混入和组件里的方法。

三、extends

1.extends用法

extends选项允许声明扩展另一个组件,而无需使用 Vue.extend。

通过外部增加对象的形式,对构造器进行扩展。它和混入mixins非常的类似。只不过接收的参数是简单的选项对象或构造函数,所以extends只能单次扩展一个组件。

Extends


num:{{ num }}

add

var bbb = {

updated() {

console.log("我是被扩展出来的");

},

methods: {

add: function () { //跟原生的方法冲突,取原生的方法,这点跟混入一样

console.log('我是被扩展出来的add方法!');

this.num++;

}

}

};

var app = new Vue({

el: '#app',

data: {

num: 1

},

methods: {

add: function () {

console.log('我是原生add方法');

this.num++;

}

},

updated() {

console.log("我是扩展出来的");

},

extends: bbb// 接收对象和函数

})

从上面的例子也可看出,执行的先后顺序和mixins一样,另外扩展的方法与原生的冲突时,扩展的方法不生效,这点跟混入一样。

2.extends和mixins优先级比较var extend={

data:{extendData:'我是extend的data'},

created:function(){

console.log('这是extend的created');

}

}

var mixin={

data:{mixinData:'我是mixin的data'},

created:function(){

console.log('这是mixin的created');

}

}

var vm=new Vue({

el:'#app',

data:{mixinData:'我是vue实例的data'},

created:function(){

console.log('这是vue实例的created');

},

methods:{

getSum:function(){

console.log('这是vue实例里面getSum的方法');

}

},

mixins:[mixin],

extends:extend

})

由此可以得出,相对于mixins,extends触发的优先级更高

四、extend

Vue.extend只是创建一个构造器,它是为了创建可复用的组件。其主要用来服务于Vue.component,用来生成组件

/**

* 方式1:先创建组件构造器,然后由组件构造器创建组件

*/

//1.使用Vue.extend()创建一个组件构造器

var MyComponent = Vue.extend({

template: '

Hello World
'

});

//2.使用Vue.component(标签名,组件构造器),根据组件构造器来创建组件

Vue.component('hello', MyComponent);

/**

* 方式2:直接创建组件(推荐)

*/

// Vue.component('world',{

Vue.component('my-world', {

template: '

你好,世界

'

});

var vm = new Vue({ //这里的vm也是一个组件,称为根组件Root

el: '#itany',

data: {}

});

以上是“Vue2.0中组件的继承与扩展是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值