详解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 相关文章推荐
jquery自定义下拉列表示例
Apr 25 Javascript
director.js实现前端路由使用实例
Feb 03 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
ECMAScript6中Map/WeakMap详解
Jun 12 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
JavaScript实现下拉菜单的显示和隐藏
Jan 05 Javascript
Mvc提交表单的四种方法全程详解
Aug 10 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
AngularJS实现图片上传和预览功能的方法分析
Nov 08 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 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
牡丹941资料
2021/03/01 无线电
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
一个实用的php验证码类
2017/07/06 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
python 合并文件的具体实例
2013/08/08 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
办公室前台岗位职责
2014/01/04 职场文书
教师求职信
2014/06/17 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
党校毕业心得体会
2014/09/13 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书