详解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操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
在JS方法中返回多个值的方法汇总
May 20 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
Javascript的表单验证长度
Mar 16 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
Feb 21 Javascript
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
vue之数据交互实例代码
Jun 16 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
Feb 14 Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
vue前端工程的搭建
Mar 31 Vue.js
使用react+redux实现计数器功能及遇到问题
Jun 02 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 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
javascript简单实现命名空间效果
2014/03/06 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
electron中使用bootstrap的示例代码
2018/11/06 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
python实现超市扫码仪计费
2018/05/30 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
python GUI模拟实现计算器
2020/06/22 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
企业军训感想
2014/02/07 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
志愿者活动总结范文
2014/04/26 职场文书
2015年材料员工作总结
2015/04/30 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
python使用pymysql模块操作MySQL
2021/06/16 Python
Python中第三方库Faker的使用详解
2022/04/02 Python