详解Vue.js组件可复用性的混合(mixin)方式和自定义指令


Posted in Javascript onSeptember 06, 2017

混合是什么

混合 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混合对象可以包含任意组件选项。以组件使用混合对象时,所有混合对象的选项将被混入该组件本身的选项。

例如:

var tpl1={
  template:'#stpl1',
  data:function(){
    return {msg:false}
  },
  methods:{
    msgf:function(){
      this.msg=!this.msg
    }
  }
}
var tpl2={
  template:'#stpl2',
  data:function(){
    return {msg:false}
  },
  methods:{
    show:function(){
      this.msg=true
    },
    hide:function(){
      this.msg=false
    }
  }
}
new Vue({
  el:'#box',
  components:{
    tpla:tpl1,
    tplb:tpl2,
  }
})

我们会发现,两个组件中的数据大多数相同,这是我们可以将它们进行混合

// 首先,定义一个混合对象
var mymixin = {
  data:function(){
    return {msg:false}
  },
  methods:{
    show:function(){
      this.msg=true
    },
    hide:function(){
      this.msg=false
    },
    msgf:function(){
      this.msg=!this.msg
    }
  }
}
var tpl1={
  template:'#stpl1',
  minins:[mymixin]
}
var tpl2={
  template:'#stpl2',
  minins:[mymixin]
}
// 如果我们需要在第一个组件定义data为true时,我们可以直接在组件内定义,他会覆盖mixin的data
var tpl1={
  template:'#stpl1',
  minins:[mymixin],
  data:function(){
    msg:true
  }
}

自定义指令

除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令。注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令。

// 注册一个全局自定义指令 v-focus
Vue.directive('focus', {
 // 当绑定元素插入到 DOM 中。
 inserted: function (el) {
  // 聚焦元素
  el.focus()
 }
})

也可以注册局部指令,组件中接受一个 directives 的选项:

directives: {
 focus: {
  // 指令的定义---
 }
}

然后你可以在模板中任何元素上使用新的 v-focus 属性:

<input v-focus>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Js放到HTML文件中的哪个位置有什么区别
Aug 21 Javascript
js在指定位置增加节点函数insertBefore()用法实例
Jan 12 Javascript
js中不同的height, top的区别对比
Sep 24 Javascript
jquery实现图片预加载
Dec 25 Javascript
详解Document.Cookie
Dec 25 Javascript
electron实现qq快捷登录的方法示例
Oct 22 Javascript
浅析vue中的MVVM实现原理
Mar 04 Javascript
微信小程序错误this.setData报错及解决过程
Sep 18 Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
JS中间件设计模式的深入探讨与实例分析
Apr 11 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
Aug 19 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 #Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 #Javascript
JavaScript 中Date对象的格式化代码方法汇总
Sep 06 #Javascript
jquery实现限制textarea输入字数的方法
Sep 06 #jQuery
Vue的百度地图插件尝试使用
Sep 06 #Javascript
表格展示利器 Bootstrap Table实例代码
Sep 06 #Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 #Javascript
You might like
php URL验证正则表达式
2011/07/19 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
php开启openssl的方法
2014/05/15 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
vue中的inject学习教程
2019/04/24 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python 错误和异常代码详解
2018/01/29 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
二年级小学生评语
2014/04/21 职场文书
贷款担保申请书
2014/05/20 职场文书
三严三实对照检查材料
2014/08/25 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
校长师德表现自我评价
2015/03/05 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP