iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue 父子组件共用mixins的注意点
  • 357
分享到

vue 父子组件共用mixins的注意点

2024-04-02 19:04:59 357人浏览 泡泡鱼
摘要

目录父子组件共用mixins的注意点详解mixins混入使用什么是Mixins?什么时候使用Mixins?如何创建Mixins?如何使用Mixins?Mixins的特点Mixins合

父子组件共用mixins的注意点

  • 父子组件正常引用(通过props传值):父子组件之间的关系是相互独立的
  • 父子组件共用一个mixins:(在同一个作用域内,直接使用)

开发过程中,会遇到tableData直接渲染的情况,数据量过大,则会拆分多个子组件,此时第一次进入页面,调用api后端传参tableData,需要对数据进行组装修改,我发现控制台打印能出现,页面却不渲染的情况,经验证发现el-table中每次只能监听整个row的变化,row中某个属性变化时,是无法追中的,要么this.$set(tableData,index,row)强行设置,index是row在tableData的索引,要么就正常组装tableData,然后通过props传给子组件,注意不能同名,否则子组件也引入mixins,这边作用域会有冲突,其实出现这个问题还是对mixins的引入顺序以及内部原理不太清晰。

mixins-beforeCreate——father-beforeCreate——mixins-created——father-created——mixins-beforeMount——father-beforeMount——son-beforeCreate——son-created——son-beforeMount——son-mounted——mixins-mounted——father-mounted

mixins中的import data components watch computed methods 等等都是对组件的拓展,相当于组件中没有的话,mixins中有,组件中可以直接调用,当mixins中的定义的变量与组件中的同名发生冲突时,以组件中为准。 

详解mixins混入使用

当我们的项目越来越大,我们会发现组件之间可能存在很多相似的功能,你在一遍又一遍的复制粘贴相同的代码段(data,method,watch、mounted等),如果我们在每个组件中去重复定义这些属性和方法会使得项目出现代码冗余并提高了维护难度,针对这种情况官方提供了Mixins特性

什么是Mixins?

mixins(混入),官方的描述是一种分发 Vue 组件中可复用功能的非常灵活的方式,mixins是一个js对象,它可以包含我们组件中script项中的任意功能选项,如data、components、methods 、created、computed等等。

我们只要将共用的功能以对象的方式传入 mixins选项中,当组件使用 mixins对象时所有mixins对象的选项都将被混入该组件本身的选项中来,这样就可以提高代码的重用性,使你的代码保持干净和易于维护。

什么时候使用Mixins?

当我们存在多个组件中的数据或者功能很相近时,我们就可以利用mixins将公共部分提取出来,通过 mixins封装的函数,组件调用他们是不会改变函数作用域外部的。

如何创建Mixins?

在src目录下创建一个mixins文件夹,文件夹下新建一个myMixins.js文件。

前面我们说了mixins是一个js对象,所以应该以对象的形式来定义myMixins,在对象中我们可以和vue组件一样来定义我们的data、components、methods 、created、computed等属性,并通过export导出该对象

如何使用Mixins?

在需要调用的组件中引入myMixins.js文件,然后在export default 中引入你需要的对象即可

Mixins的特点

【5.1】方法和参数在各组件中不共享,虽然组件调用了mixins并将其属性合并到自身组件中来了,但是其属性只会被当前组件所识别并不会被共享,也就是其他组件无法从当前组件中获取到mixins中的数据和方法。

①首先我们在混合对象myMixins.js中定义一个age字段和getAge方法

 
export const myMixins = {
  components:{},
  data() {
    return {
      age: 18,
    }
  },
  mounted() {
    this.getAge()
  },
  methods: {
    getAge() {
      console.log(this.age)
    }
  }

② 组件1中对num进行+1操作

 
import { myMixins } from "@/mixins/myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  created() {
    this.age++
  },
}

③组件2不进行操作

 
export default {
  mixins: [myMixins],
  data() {
    return {}
  },
}

④我们分别切换到两个页面,查看控制台输出。会发现组件1改变了age里面的值,组件2中age值还是混合对象的初始值,并没有随着组件1的增加而改变

【5.2】引入mixins后组件会对其进行合并,将mixins中的数据和方法拓展到当前组件中来,在合并的过程中会出现冲突,接下来我们详细了解Mixins合并冲突

Mixins合并冲突

【6.1】值为对象(components、methods 、computed、data)的选项,混入组件时选项会被合并,键冲突时优先组件,组件中的键会覆盖混入对象的

①我们在混入对象增加age属性、getAge1方法和getAge2方法

 
// myMixins.js
export const myMixins = {
  components:{},
  data() {
    return {
      age: 18,
    }
  },
  methods: {
    getAge1() {
      console.log("age1 from mixins =", this.age )
    },
    getAge2() {
      console.log("age2 from mixins =", this.age )
    },
  }
}

②我们在引入了myMixins文件的组件中,增加age属性、getAge1方法和getAge3方法

// template.vue
import { myMixins } from "@/mixins/myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {
      age: 20,
    }
  },
  mounted() {
    this.getAge1();
    this.getAge2();
    this.getAge3();
  },
  methods: {
    getAge1() {
      console.log('age1 from template =', this.age)
    },
    getAge3() {
      console.log('age3 from template =', this.age)
    },
  }
}

③我们会发现,组件中的age覆盖了混合对象的age,组件的getAge1方法覆盖了混合对象的getAge1方法

【6.2】值为函数(created、mounted)的选项,混入组件时选项会被合并调用,混合对象里的钩子函数在组件里的钩子函数之前调用

 
// myMixins.js
export const myMixins = {
  components:{},
  data() {
    return {}
  },
  created() {
    console.log('xxx from mixins')
  }
}
 
import { myMixins } from "@/mixins/myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  created() {
    console.log('xxx from template')
  }
}

与vuex的区别

  • vuex:用来做状态管理的,里面定义的变量在每个组件中均可以使用和修改,在任一组件中修改此变量的值之后,其他组件中此变量的值也会随之修改。
  • Mixins:可以定义共用的变量,在每个组件中使用,引入组件中之后,各个变量是相互独立的,值的修改在组件中不会相互影响。

与公共组件的区别

  • 组件:在父组件中引入组件,相当于在父组件中给出一片独立的空间供子组件使用,然后根据props来传值,但本质上两者是相对独立的。
  • Mixins:则是在引入组件之后与组件中的对象和方法进行合并,相当于扩展了父组件的对象与方法,可以理解为形成了一个新的组件。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: vue 父子组件共用mixins的注意点

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

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

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

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

下载Word文档
猜你喜欢
  • vue 父子组件共用mixins的注意点
    目录父子组件共用mixins的注意点详解mixins混入使用什么是Mixins?什么时候使用Mixins?如何创建Mixins?如何使用Mixins?Mixins的特点Mixins合...
    99+
    2024-04-02
  • Vue组件中的父子组件使用
    目录Vue组件中的父子组件父组件向子组件传值子组件向父组件传值Vue父子组件的生命周期总结Vue组件中的父子组件 父组件向子组件传值 父组件通过属性绑定(v-bind:)的形式, 把...
    99+
    2023-01-28
    Vue组件 Vue父子组件 Vue父子组件使用
  • 关于vue父组件调用子组件的方法
    组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功...
    99+
    2024-04-02
  • vue父子组件slot插槽的使用
    目录vue父子组件slot插槽1.创建一个子组件并在vue实例中注册2.在HTML代码中使用子组件3.在vue实例中写入想要插入到子组件的内容4.在子组件的模板中通过一个slot标签...
    99+
    2022-11-13
    vue父子组件 vue slot插槽 插槽slot
  • Vue怎么用父组件向子组件通信
    本文小编为大家详细介绍“Vue怎么用父组件向子组件通信”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么用父组件向子组件通信”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。props组件实例的作用域是孤立的...
    99+
    2023-07-04
  • Vue中的父子组件通讯以及使用sync同步父子组件数据
    目录前言子组件向父组件中传递数据一. 通过props从父向子组件传递函数,调用函数改变父组件数据二. 通过自定义事件从子组件向父组件中传递数据三. 通过ref属性在父组件中直接取得子...
    99+
    2024-04-02
  • Vue父组件调用子组件函数实现
    Vue父组件调用子组件的函数 父组件通过事件调用子组件的函数。例如父组件通过 点击事件 让子组件发请求。 文章中的项目已经通过脚手架去创建。 DEMO: Father.js ...
    99+
    2024-04-02
  • Vue子组件监听父组件值的变化
    目录子组件监听父组件值变化子组件监听父组件的值同步更新数据子组件监听父组件值变化 子组件中利用watch监听父组件值的变化 // 子组件 props: ["a"],     watc...
    99+
    2024-04-02
  • 公共组件父子依赖调用及子校验父条件问题解决
    目录问题背景关于依赖尝试动态注入依赖importrequire其他思考解决办法子组件校验父组件条件总结问题背景 业务需求需要用到一个数据批量上传和上传模板导入功能,并且在很多个页面中...
    99+
    2022-11-13
    公共组件父子依赖调用校验 公共父子组件依赖调用
  • vue中怎么通过父组件点击触发子组件事件
    这期内容当中小编将会给大家带来有关vue中怎么通过父组件点击触发子组件事件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。父组件app.vue<template>...
    99+
    2024-04-02
  • 详细解读VUE父子组件的使用
    目录1.递归组件2.组件之间的循环使用二,深层次的问题**1.父传子****2.子传父***3.兄弟关系** 4.子组件复用5.父组件通过ref调用子组件的方法我们对父子组...
    99+
    2023-05-19
    VUE 组件 VUE父子组件
  • vue父子组件动态传值的几种方式及注意问题详解
    1.vue父组件向子组件动态传值的两种方法 在一些项目需求中需要父组件向子组件动态传值,比如我这里的需求是,父组件动态通过axios获取返回的图片url数组然后传给子组件,上传图片的...
    99+
    2022-12-24
    vue父子组件动态传值方式 vue父组件中获取子组件中数据 vue父组件向子组件动态传值
  • vue子组件怎么获取父组件的内容
    本篇内容介绍了“vue子组件怎么获取父组件的内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!子组件如何获取父组件的内容props属性组件实...
    99+
    2023-06-30
  • vue子组件如何使用父组件传过来的值
    目录子组件使用父组件传过来的值父组件子组件vue子组件调用父组件数据子组件使用父组件传过来的值 父组件 <alarmstatistics :roless.sync="role"...
    99+
    2024-04-02
  • vue子组件怎么使用父组件传过来的值
    本篇内容主要讲解“vue子组件怎么使用父组件传过来的值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue子组件怎么使用父组件传过来的值”吧!子组件使用父组件传过来的值父组件<alarms...
    99+
    2023-06-29
  • vue父子组件的互相传值和调用
    目录1、父传值给子组件2、子传值给父组件3、子调用父组件中的方法4、父调用子组件中的方法1、父传值给子组件 父组件: <template> <div>...
    99+
    2024-04-02
  • vue之父组件向子组件传值并改变子组件的样式
    问题描述:在做视频网站过程中发现每个视频的样式其实是大致相同的,所以就想着直接写个组件,但是又看不懂官网的传值,所以自己找了个视频看明白了。 想实现的效果: vue父组件向子组件传值...
    99+
    2022-12-24
    vue父组件向子组件传值 vue父组件改变子组件的样式
  • Vue子组件调用父组件方法案例详解
    一、直接在子组件中通过this.$parent.event来调用父组件的方法 <!-- 父组件 --> <template> <div> ...
    99+
    2024-04-02
  • Vue中怎么利用父组件向子组件通信
    今天就跟大家聊聊有关Vue中怎么利用父组件向子组件通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。props组件实例的作用域是孤立的。子组件的模板...
    99+
    2024-04-02
  • 如何用Vue实现父子组件通信
    目录一、父子组件的关系构成二、props三、$emit四、$parent五、总结 一、父子组件的关系构成 本篇文章将要总结的是Vue中父子组件之间的通信方式。 那在vue中父子组件之...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作