iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vuejs中怎么使用mixin局部混入与全局混入
  • 425
分享到

vuejs中怎么使用mixin局部混入与全局混入

2023-06-30 14:06:49 425人浏览 泡泡鱼
摘要

这篇文章主要介绍“Vuejs中怎么使用mixin局部混入与全局混入”,在日常操作中,相信很多人在vuejs中怎么使用mixin局部混入与全局混入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vuejs中怎么使

这篇文章主要介绍“Vuejs中怎么使用mixin局部混入与全局混入”,在日常操作中,相信很多人在vuejs中怎么使用mixin局部混入与全局混入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vuejs中怎么使用mixin局部混入与全局混入”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    需求

    假设:现在有两个不同的按钮组件ButtonA,ButtonB,点击它弹出组件自身不同的属性

    用Vue-cli脚手架创建一个项目,在components文件夹下分别创建ButtonA.vue,ButtonB.vue两个组件

    以下是ButtonA组件内容,在按钮上绑定了handleButton方法,并在methods选项配置中定义

    <template>    <div class="wrap">        <button @click="handleButton">按钮组件A</button>    </div></template><script>    export default {        name: "ButtonA",        data() {            return {                name: "itclan.cn"            }        },        methods: {            handleButton() {                alert(this.name);            }        }    }</script><style lang="sCSS" scoped>.wrap {    margin-right: 20px;}</style>

    以下是ButtonB组件内容,在按钮上绑定了handleButton方法,并在methods选项配置中定义

    <template>    <div>        <button @click="handleButton">按钮组件B</button>    </div></template><script>    export default {        name: "ButtonB",        data() {            return {                name: "video.itclan.cn"            }        },        methods: {            handleButton() {                alert(this.name);            }        }    }</script><style lang="scss" scoped></style>

    然后再App.vue当中引入两个ButtonA,ButtonB组件

    <template>  <div id="app">       <ButtonA></ButtonA>       <ButtonB></ButtonB>  </div></template><script>import ButtonA from "./components/ButtonA"import ButtonB from "./components/ButtonB"export default {  name: 'App',  components: {    ButtonA,    ButtonB  }}</script><style>#app {  font-family: Avenir, Helvetica, Arial, sans-serif;  -WEBkit-font-smoothing: antialiased;  -moz-osx-font-smoothing: grayscale;  text-align: center;  color: #2c3e50;  margin-top: 60px;  display: flex;  justify-content: center;}</style>

    经过上面的几行代码,可以实现我们想要的目的,但是你会发现,他们的功能逻辑都是一样的,定义的方法名也都是一样的

    如果一个项目里,有很多个这样的组件,只要想改,那么所有的单文件组件都得手动的修改一次,毫无疑问,重复性的代码也比较多,比较分散

    对于不同组件间同样的配置,能不能提取出来共用一份呢,在Vue当中,提供了mixin

    什么是mixin

    把多个组件共有的配置提取成一个混入对象,然后通过局部混入或者全局混入,以达到共用配置的目的,这就是mixin

    官方文档: 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项

    翻译一下: 将组件的公共逻辑或者配置(包括data,方法,生命周期,甚至props等)提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部即可。这样既可以减少代码冗余度,也可以让后期维护起来更加容易,改一处即可,不用到处去每个组件内修改配置

    注意:提取的是逻辑或配置,而不是html代码和CSS代码。也就是说,mixin就是组件中的组件,Vue组件化让我们的代码复用性更高

    那么组件与组件之间还有重复部分,比如逻辑业务的复用,我们还可以使用Mixin在抽离一遍

    以下是经过mixin改写过的

    在src文件夹下创建一个mixin文件夹(这个文件夹下全部放入一些混入),创建一个popButton.js文件,创建一个对象,然后暴露出去,如下所示

    export const popButton  = {    // 这里面组件选项的配置都是可以的,生命周期等,data属性,计算属性,监听属性等    methods: {        handleButton() {            alert(this.name);        }    }}

    然后再组件使用处引入即可,如下ButtonA组件,通过import引入,同时在组件配置选项中mixins:[引入的混入名],要是多个的话,用逗号分隔

    <template>    <div class="wrap">        <button @click="handleButton">按钮组件A</button>    </div></template><script>import {popButton} from "../mixin/popButton.js"    export default {        name: "ButtonA",        mixins: [popButton],        data() {            return {                name: "itclan.cn"            }        },    }</script><style lang="scss" scoped>.wrap {    margin-right: 20px;}</style>

    这种在组件内部,通过minxins:[混入名称],也被视为局部混入

    局部混入也就是只在当前组件内起作用,与按需加载有些相似,也就是需要用到mixin中的代码时,我们再在组件内引入它

    而全局混入的话,则代表我在项目的任何组件中都可以使用mixin,从根组件下至到它的任何一个组件都会用到混入

    全局混入

    局部混入是,在需要的组件引入混入,通过import导入混入,在通过在组件的配置选项中通过minxins: [混入名称]

    而全局混入,则是在项目代码中的main.js中去引入混入,在用Vue.mixin(混入名称)进行注册

    这样任何一个组件,都可以使用混入了的,如下代码所示

    import Vue from 'vue'import App from './App.vue'import {popButton} from "./mixin/popButton.js"Vue.mixin(popButton);Vue.config.productionTip = falsenew Vue({  render: h => h(App),}).$mount('#app')

    ::: tip 注意事项 在使用全局混入时,应当格外小心,一旦使用全局混入,它将影响每一个之后创建的vue实例,也就是所有的vm,vc都会有混入

    它与局部混入没有啥区别,虽然一次性注入混入很方便,但是也会带来一些问题,所有的组件实例,Vue实例都会有混入

    在官方的特殊提示里,提到了,谨慎使用全局混入,因为它会影响每个单独创建的vue实例(包括第三方组件)

    大多数情况下,只应当应用于自定义选项,就像上面示例一样,推荐将其作为插件发布,以避免重复应用混入 :::

    几个重要的疑问

    • mixin中的生命周期函数会和组件的生命周期一起合并执行

    • mixin中的data数据在组件中可以使用

    • mixin中的方法在组件内部可以直接调用

    • 生命周期函数合并后执行顺序:先执行mixin中的,然后执行组件的

    • mounted不会合并,都会加载一遍

    • 不同组件中的mixin是相互独立的,改变一个组件中mixin中的数据,另一个引用了mixin的组件不会受影响

    如下代码

    export const popButton  = {    data() {        return {            name: "川川",            age: 18        }    },    created() {        console.log("混入生命周期开始执行");    },    mounted() {        console.log("我是混入");    },    methods: {        handleButton() {            alert(this.name);        },        handleMounted() {            console.log("加载方法");        }    }}

    选项合并

    当组件和混入对象含有同名选项时,这些选项将以合适的方式进行合并

    也就是说,当mixin中定义的数据,方法名与组件里的属性名,方法名同名时,会怎么样呢

    会存在数据,和方法名的覆盖问题?谁覆盖谁?执行先后顺序是?

    生命周期函数

    mixin里面可以有自己的生命周期函数,同组件一样,生命周期函数是自执行函数,在某个阶段会自动执行

    它都是固定的,默认合并策略如下所示

    • 先执行mixin中生命周期函数中的代码,然后再执行组件内部的代码

    export const popButton  = {    data() {        return {            name: "川川",            age: 18        }    },    beforeCreate() {        console.log("创建之前");    },    created() {        console.log("混入生命周期开始执行");    },    mounted() {        console.log("我是混入");    },    beforeUpdate() {        console.log("更新之前");    },    updated() {        console.log("更新之时");    },    beforeDestroy() {        console.log("销毁之前");    },    destroyed() {        console.log("销毁时");    },    methods: {        handleButton() {            alert(this.name);        },        handleMounted() {            console.log("加载方法");        }    }}

    若是方法重名,则后者组件内的方法会覆盖mixin中的方法

    data数据冲突

    当mixin中的data数据与组件中的data数据冲突时,组件中的data数据会覆盖mixin中的数据

    若是没有相同的话,会进行数据的合并

    export const popButton  = {    data() {        return {            name: "川川",            age: 18        }    },}

    方法名冲突

    在同一个项目里,起相同的名称,是很容易遇到的,如果mixin中的方法名与引入mixin中组件的方法名一致时,那么以当前组件为准

    mixin的优缺点

    既然mixin这么好用,那为什么不直接大量推荐使用?mixin可以复用组件的逻辑,这样可以节省很多代码,但是同样,也会带来一些问题

    1.变量名来源不明确

    在某些单文件组件里,引入mixin,因为组件内可以调用mixin的方法和使用mixin中定义的数据,找上下文的时候,变得不是那么直观,要么通过阅读代码逐级向上进行查找,要么就是全局进行搜索查找

    使用mixin时,不利于阅读,代码变得难以维护

    因为组件里可以引入多个mixin,并直接隐式的调用mixin里面的变量和方法,这会让写代码的人看着有些混乱,区分不出这些变量和方法,分别是哪个mixin的

    所以这里建议是:但凡mixin的方法,统一放到mixin文件夹下进行管理的

    2. 多个mixins的生命周期会合并融合到一起运行,但是同名属性,同名方法无法融合,会导致冲突或覆盖

    当遇到组件中定义的属性,方法与minxin当中的出现相同时,后者组件的属性会覆盖mixin中的属性

    3. mixins和组件可能出现多对多的关系,复杂度会变高

    一个组件可以引用多个mixins一个mixins也可以被多个组件引用,因为是共用逻辑,所以在关系上,不是很明确

    不好追溯代码,排查问题,可以利用工具vscode全局搜索,如果是很多个地方用到了的mixin那么就得挨个的检查

    如果滥用mixin的话,会让代码变得难以维护

    如果是用了全局混入,在审查代码时,在任何一组件当中会莫名的多出一些属性和方法,会令新的同学很困惑,如果对mixin很熟悉的话,那没什么,如果不熟悉

    那么就非常苦恼,这个变量名和方法,我在组件当中明明没有定义,但是为啥能使用呢,带来一些困惑

    注意

    如果一个功能,逻辑,一开始就很确定,它以后是不会动的,那么就可以使用mixin

    mixin优点

    • 提高组件代码复用性

    • 无需传递状态

    • 维护方便,只需要修改一处地方就可以,全局混入,应当谨慎使用

    到此,关于“vuejs中怎么使用mixin局部混入与全局混入”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: vuejs中怎么使用mixin局部混入与全局混入

    本文链接: https://www.lsjlt.com/news/329500.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • vuejs中怎么使用mixin局部混入与全局混入
      这篇文章主要介绍“vuejs中怎么使用mixin局部混入与全局混入”,在日常操作中,相信很多人在vuejs中怎么使用mixin局部混入与全局混入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vuejs中怎么使...
      99+
      2023-06-30
    • vuejs中使用mixin局部混入/全局混入的方法详解
      目录前言需求什么是mixin全局混入几个重要的疑问选项合并生命周期函数data数据冲突方法名冲突mixin的优缺点1.变量名来源不明确2. 多个mixins的生命周期会合并融合到一起...
      99+
      2024-04-02
    • vue cli 局部混入mixin和全局混入mixin的过程
      目录局部混入mixin和全局混入mixin应用场景1、局部混入mixin2、全局混入mixinmixins的使用方法和注意点局部混入mixin和全局混入mixin 应用场景 两个组件...
      99+
      2024-04-02
    • Vue.js混入mixin怎么用
      这篇文章主要介绍了Vue.js混入mixin怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求背景:在一个后台的管理系统中,不同的用户...
      99+
      2024-04-02
    • Vue中mixin混入怎么用
      这篇文章主要介绍了Vue中mixin混入怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 局部混入<template>  <...
      99+
      2023-06-25
    • python中Mixin混入类如何使用
      这篇文章主要讲解了“python中Mixin混入类如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中Mixin混入类如何使用”吧!前言最近在看sanic的源码,发现有很多M...
      99+
      2023-07-02
    • vue3的mixin混入使用方法是什么
      本篇内容主要讲解“vue3的mixin混入使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3的mixin混入使用方法是什么”吧!vue 2 中采用选项式API 如: ...
      99+
      2023-06-21
    • python 中Mixin混入类的使用方法详解
      目录前言Mixin 与继承的区别总结前言 最近在看sanic的源码,发现有很多Mixin的类,大概长成这个样子 class BaseSanic(    RouteMixin,  ...
      99+
      2024-04-02
    • vue中的mixins怎么混入使用
      这篇文章主要介绍了vue中的mixins怎么混入使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue中的mixins怎么混入使用文章都会有所收获,下面我们一起来看看吧。作用用简单的话去概括就是一种分发vue...
      99+
      2023-06-30
    • vue映射的方法与怎么混入使用
      这篇文章主要介绍了vue映射的方法与怎么混入使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue映射的方法与怎么混入使用文章都会有所收获,下面我们一起来看看吧。vue映射方法与混入使用v-selec ...
      99+
      2023-06-30
    • Vue中mixins混入的介绍与使用详解
      目录一、来自官网的描述二、如何创建Mixins三、项目中如何使用混入四、与vuex的区别五、与公共组件的区别一、来自官网的描述 混入 (mixins): 是一种分发 Vue 组件中可...
      99+
      2022-12-23
      Vue mixins混入 Vue mixins使用
    • c#局部变量怎么给全局使用
      在 c# 中,可以通过以下方法使局部变量作为全局变量使用:声明全局变量,使用 static 关键字。声明共享变量,使用 const 关键字。使用静态方法,该方法不依赖于实例。使用委托,将...
      99+
      2024-05-12
      c#
    • element-plus中怎么实现按需导入与全局导入
      这篇文章主要介绍了element-plus中怎么实现按需导入与全局导入,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。按需导入:安装插件首先需要引入额外的插件:前**vite-...
      99+
      2023-06-21
    • vue3.0中sass全局怎么使用
      本篇内容介绍了“vue3.0中sass全局怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue3.0 sass全局的使用需要安装一个...
      99+
      2023-06-30
    • vue项目中怎么实现全局引入jquery
      这篇文章主要介绍“vue项目中怎么实现全局引入jquery”,在日常操作中,相信很多人在vue项目中怎么实现全局引入jquery问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue项目中怎么实现全局引入jqu...
      99+
      2023-07-02
    • 深入了解Java中成员变量与局部变量的使用与区别
      目录一、成员变量和局部变量的区别二、封装private关键字private的使用this关键字一、成员变量和局部变量的区别 类中位置不同:成员变量(类中方法外)局部变量(方法内部或方...
      99+
      2024-04-02
    • Python中怎么使用非局部变量
      这篇文章将为大家详细讲解有关Python中怎么使用非局部变量,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。全局变量在 Python 中,在函数之外或在全局范围内声明的变量被称为全局变量。 这...
      99+
      2023-06-17
    • 怎么使用Android实现EditText图文混合插入上传功能
      这篇文章将为大家详细讲解有关怎么使用Android实现EditText图文混合插入上传功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前段时间做了一个Android会议管理系统,项目需求涉及到EditT...
      99+
      2023-05-30
      android edittext
    • node中的全局函数怎么使用
      本文小编为大家详细介绍“node中的全局函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“node中的全局函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
      99+
      2024-04-02
    • Vue两个通信方式与动画过度及混入使用的方法是什么
      这篇文章主要介绍了Vue两个通信方式与动画过度及混入使用的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue两个通信方式与动画过度及混入使用的方法是什么文章都会有所收获,下面我们一起来看看吧。一、全...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作