详解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 相关文章推荐
AJAX的跨域与JSONP(为文章自动添加短址的功能)
Jan 17 Javascript
javascript 从if else 到 switch case 再到抽象
Jul 17 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
Jun 22 Javascript
Vue中fragment.js使用方法详解
Mar 09 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
Oct 25 Javascript
微信小程序实现打开内置地图功能【附源码下载】
Dec 07 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
Feb 20 Javascript
简单了解Ajax表单序列化的实现方法
Jun 14 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
Jul 22 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
Jul 26 Javascript
JavaScript实现秒杀时钟倒计时
Sep 29 Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHP实现的简单异常处理类示例
2017/05/04 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
python实现点对点聊天程序
2018/07/28 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
电子商务专业个人的自我评价
2013/12/19 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
开学第一周值周总结
2015/07/16 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server