vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue.extend,mixins和vue.component区别

vue.extend,mixins和vue.component的区别及说明

作者:web_彭于晏

Vue.extend 创建Vue的子类,可视为组件构造函数,Vue.mixin 允许全局添加方法或属性,方便所有组件使用,Vue.component 是插件注册方法,通过Vue.extend创建的组件实例可以注册到Vue全局,使其在任何组件中可用

1.vue.extend

Vue.extend就是传入一下组件options,然后返回了一个Vue的子类,也可以看做是一个组件构造函数。

例子:

可以通过vue.component将这个vue子类注册到全局

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>在Vue中注册组件</title>
</head>
<body>
<div id="app">
    <todo :todo-data="groceryList"></todo>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue " type="text/javascript"></script>
<script>
/**
 * 请注意,extend创建的是一个组件构造器,而不是一个具体的组件实例。
 * 所以他不能直接在new Vue中这样使用: new Vue({components: fuck})
 * 最终还是要通过Vue.components注册才可以使用的。 
 */

// 构建一个子组件
var todoItem = Vue.extend({
    template: ` <li> {{ text }} </li> `,
    props: {
        text: {
            type: String,
            default: ''
        }
    }
})

// 构建一个父组件
var todoWarp = Vue.extend({
    template: `
        <ul>
            <todo-item 
                v-for="(item, index) in todoData"
                v-text="item.text"
            ></todo-item>
        </ul>
    `,
    props: {
      todoData: {
          type: Array,
          default: []
      }
    },
    // 局部注册子组件
    components: {
        todoItem: todoItem
    }
})

// 注册到全局
Vue.component('todo', todoWarp)

new Vue({
    el: '#app',
    data: {
        groceryList: [
            { id: 0, text: '蔬菜' },
            { id: 1, text: '奶酪' },
            { id: 2, text: '随便其它什么人吃的东西' }
        ]
    }
})
</script>
</html>

2.vue.mixin

mixins可以全局添加一些方法或属性,方便所有组件调用。可以用来添加通用的对象引用和方法,

在混入的时候会先执行混入的created再执行组件里的created,当方法冲突时会使用当前组件里的

例子:

Vue.mixin({
    data:{
        //组件中可以使用this.$axios来调用axios的方法,十分方便
        $axios: axios
    },
    methods: {
        //每个组件从全局store中取出用户信息
        getUser() {
            return store.getters.user;
        }
    }
})

3.vue.component

Vue.component是一个插件注册方法,就是把Vue.extend函数new出来的组件实例,注册到Vue的Options上。

本质是也就是在全局Vue实例的Options,添加了一个key/value,value就是组件实例。由于组件的

Options会继承Vue的Options,所以在任何组件中,都能调用该组件。

Vue.component('global-component', Vue.extend(baseOptions));

这是原始的调用方式,用Vue.extend注册一个组件。

Vue内部对其进行了简化,可以省略调用Vue.extend,只传入Options就行了

//传入一个选项对象(自动调用 Vue.extend),等价于上行代码.
Vue.component('global-component', baseOptions);

​​​​​​​总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文