mixin混入

混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。

  • 组件式混入

    // 定义一个混入对象
    var myMixin = {
    created: function () {this.hello()},
    methods: {
    hello: function () {
    console.log('hello from mixin!')
    }
    }
    }
    // 定义一个使用混入对象的组件
    var Component = Vue.extend({mixins: [myMixin]})
    var component = new Component() // => "hello from mixin!"
  • vue实例混入

    • 数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。

      var mixin = {
      data: function () {
      return {message: 'hello',foo: 'abc'}
      }
      }
      new Vue({
      mixins: [mixin],
      data: function () {
      return {message: 'goodbye',bar: 'def' }
      },
      created: function () {
      console.log(this.$data)
      }
      // => { message: "goodbye", foo: "abc", bar: "def" }
      })
    • 同名钩子函数将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。

      var mixin = {
      created: function () {
      console.log('混入对象的钩子被调用')
      }
      }
      new Vue({
      mixins: [mixin],
      created: function () {
      console.log('组件钩子被调用')
      }
      })
      // => "混入对象的钩子被调用"
      // => "组件钩子被调用"
    • 值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。

      var mixin = {
      methods: {
      foo: function () {
      console.log('foo')
      },
      conflicting: function () {
      console.log('from mixin')
      }
      }
      }
      var vm = new Vue({
      mixins: [mixin],
      methods: {
      conflicting: function () {
      console.log('from self')
      }
      }
      })
      vm.foo() // => "foo"
      vm.conflicting() // => "from self"
  • 全局混入

    一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。

    // 为自定义的选项 'myOption' 注入一个处理器。
    Vue.mixin({
    created: function () {
    var myOption = this.$options.myOption;
    if (myOption) {console.log(myOption)}
    }
    })
    new Vue({myOption: 'hello!'})
    // => "hello!"

自定义选项合并策略

自定义选项将使用默认策略,即简单地覆盖已有值。如果想让自定义选项以自定义逻辑合并,可以向 Vue.config.optionMergeStrategies 添加一个函数。

Vue.config.optionMergeStrategies.myOption = function (toVal, fromVal) {
/* 返回合并后的值 */
}
// Vuex 1.x 的混入策略
const merge = Vue.config.optionMergeStrategies.computed
Vue.config.optionMergeStrategies.vuex = function (toVal, fromVal) {
if (!toVal) return fromVal
if (!fromVal) return toVal
return {
getters: merge(toVal.getters, fromVal.getters),
state: merge(toVal.state, fromVal.state),
actions: merge(toVal.actions, fromVal.actions)
}
}

页面混入模块

var mixinClock = {
data() {
return {
clock: '',
interalId: '',
}
},
created() {
this.interalId = setInterval(()=>{
this.setClock()
}, 1000)
},
destroyed() {
clearInterval(this.interalId)
},
methods:{
setClock() {
this.clock = this.dateTimeFormatter(new Date())
console.log(this.clock)
},
dateTimeFormatter(_date) {
let date = new Date(_date);
let y = date.getFullYear();
let M = (date.getMonth()).toString().padStart(2, '0');
let d = (date.getDate()).toString().padStart(2, '0');
let h = (date.getHours()).toString().padStart(2, '0');
let m = (date.getMinutes()).toString().padStart(2, '0');
let s = (date.getSeconds()).toString().padStart(2, '0');
return `${y}-${M}-${d} ${h}:${m}:${s}`
}
}
}
new Vue({
el: '.main-container',
mixins: [mixinClock],
})

VUE学习-mixin混入的更多相关文章

  1. vue.js3 学习笔记 (一)——mixin 混入

    vue 2 中采用选项式API.如:data.methods.watch.computed以及生命周期钩子函数等等. mixin 混入,提供了一种非常灵活的方式,来分发 vue 组件中的可复用功能,一 ...

  2. vue + mixin混入对象使用

    vue提供的混入对象mixin,类似于一个公共的组件,其他任何组件都可以使用它.我更经常的是把它当成一个公共方法来使用 在项目中有些多次使用的data数据,method方法,或者自定义的vue指令都可 ...

  3. vue学习(十)mixin 偷懒

    一 mixin混入偷懒技术 架子 <div id="app"> {{msg}} </div> <script> let app = new Vu ...

  4. Vue mixin(混入) && 插件

    1 # mixin(混入) 2 # 功能:可以把多个组件公用的配置提取成一个混入对象 3 # 使用方法: 4 # 第一步:{data(){return {...}}, methods:{...},.. ...

  5. vue中的混入

    数据对象合并 数据对象在内部会进行浅合并 (一层属性深度),在和组件的数据发生冲突时以组件数据优先 var mixin = { data() { return { msg_mixins: 'mixin ...

  6. vue的mixin简化开发

    vue的mixin可以将多个组件公用的声明周期方法和数据封装成一个对象,在不同的组件中自由插拔.实际做项目的时候,可以定义一些mixin,供多个组件使用.也非常有必要定义一个全局的mixin对象,对所 ...

  7. VUE mixins(混入)

    mixins是在引入组件之后 将组件内部的内容如data等方法.method等属性与父组件相应内容进行合并 相当于在引入后 父组件的各种属性方法都被扩充了. 单纯组件引用:           父组件 ...

  8. Vue学习笔记-Django REST framework3后端接口API学习

    一  使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7  (Windows x86- ...

  9. vue之mixin理解与使用

    使用场景 当有两个非常相似的组件,除了一些个别的异步请求外其余的配置都一样,甚至父组件传的值也是一样的,但他们之间又存在着足够的差异性,这时候就不得不拆分成两个组件,如果拆分成两个组件,你就不得不冒着 ...

  10. VUE学习笔记(李天禹老师版本)

    目录 VUE 一 脚手架文件结构 二 关于不同版本的Vue 三 vue.config.js配置文件 vue文件的基本结构 components 四 ref属性 TIPS 五 props配置项 Tips ...

随机推荐

  1. [OpenCV实战]45 基于OpenCV实现图像哈希算法

    目前有许多算法来衡量两幅图像的相似性,本文主要介绍在工程领域最常用的图像相似性算法评价算法:图像哈希算法(img hash).图像哈希算法通过获取图像的哈希值并比较两幅图像的哈希值的汉明距离来衡量两幅 ...

  2. [OpenCV实战]38 基于OpenCV的相机标定

    文章目录 1 什么是相机标定? 2 图像形成几何学 2.1 设定 2.1.1 世界坐标系 2.1.2 相机坐标系 2.1.3 图像坐标系 2.2 图像形成方法总结 3 基于OpenCV的相机标定原理 ...

  3. 传播问卷调查数据不够?自己生成假数据!Python编程一对一教学

    问卷调查 Excel 样式 原文件下载 生成代码 序号 直接 range 生成即可. 提交答卷时间 import time time_str = time.strftime('%Y/%m/%d %H: ...

  4. ArcEngine开发 - 打开地图读取图层

    地图文档(IMapDocument)对象是ArcEngine开发最基本对象,可以说是所有操作的第一步.使用IMapDocument可以检查和打开地图文档,读取图层信息和文档信息,为源GIS并为您详细分 ...

  5. 让 Win8.1 微软拼音新体验模式支持 Metro 应用

    内容回顾: [1]十个步骤找回 Win8 中的微软拼音新体验模式 [2]发布个工具,一键恢复Win8/8.1中的微软拼音长句模式(新体验模式) 在 [1] 中,我们找回了 Win8 里的微软拼音新体验 ...

  6. Jasypt与Apollo一起使用造成Apollo热更新失效问题分析

    背景 近日业务同学反映在Apollo界面更改配置后, 服务中对应变量的值却没有改变 相关配置key定义如下: @ApolloJsonValue("${apollo.config.map:{} ...

  7. Nodejs后端自动化测试

    偶然看到收藏一下 const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { const b ...

  8. 12.ThreadLocal的那点小秘密

    大家好,我是王有志.关注王有志,一起聊技术,聊游戏,聊在外漂泊的生活. 好久不见,不知道大家新年过得怎么样?有没有痛痛快快得放松?是不是还能收到很多压岁钱?好了,话不多说,我们开始今天的主题:Thre ...

  9. 使用字节流丢读取中文的问题-Reader类

    使用字节流丢读取中文的问题 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为 ...

  10. vue学习笔记(二) ---- vue实例的生命周期

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...