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

 更新时间:2024年09月21日 14:36:24   作者: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);

​​​​​​​总结

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

相关文章

  • vue项目配置sass及引入外部scss文件方式

    vue项目配置sass及引入外部scss文件方式

    这篇文章主要介绍了vue项目配置sass及引入外部scss文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue-cli2,vue-cli3,vite 生产环境去掉console.log

    vue-cli2,vue-cli3,vite 生产环境去掉console.log

    console.log一般都是在开发环境下使用的,在生产环境下需要去除 ,本文主要介绍了vue-cli2,vue-cli3,vite 生产环境去掉console.log,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 解决element-ui el-input赋值后不能编辑的问题

    解决element-ui el-input赋值后不能编辑的问题

    这篇文章主要介绍了解决element-ui el-input赋值后不能编辑的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • vue自定义指令实现方法详解

    vue自定义指令实现方法详解

    这篇文章主要介绍了vue自定义指令实现方法,结合实例形式分析了vue.js自定义指令相关定义、注册、使用方法及操作注意事项,需要的朋友可以参考下
    2019-02-02
  • 手写Vue2.0 数据劫持的示例

    手写Vue2.0 数据劫持的示例

    这篇文章主要介绍了手写Vue2.0 数据劫持的示例,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
    2021-03-03
  • vue如何在多个不同服务器下访问不同地址

    vue如何在多个不同服务器下访问不同地址

    这篇文章主要介绍了vue如何在多个不同服务器下访问不同地址,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 如何在Vue和Spring boot之间实现前后端连接

    如何在Vue和Spring boot之间实现前后端连接

    最近搭建一个Springboot+vue前后端分离项目,真的很简单,下面这篇文章主要给大家介绍了关于如何在Vue和Spring boot之间实现前后端连接的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • vue3中使用VueParticles实现粒子动态背景效果

    vue3中使用VueParticles实现粒子动态背景效果

    为了提高页面展示效果,特别类似于登录界面内容比较单一的,粒子效果作为背景经常使用到,vue工程中利用vue-particles可以很简单的实现页面的粒子背景效果,本文给大家分享vue粒子动态背景效果实现代码,需要的朋友参考下吧
    2022-05-05
  • vue实现页面缓存功能

    vue实现页面缓存功能

    这篇文章主要为大家详细介绍了vue实现页面缓存功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • vue-router钩子函数实现路由守卫

    vue-router钩子函数实现路由守卫

    这篇文章主要介绍了vue-router钩子函数实现路由守卫,对vue感兴趣的同学,可以参考下
    2021-04-04

最新评论