详解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 相关文章推荐
javascript之可拖动的iframe效果代码
Aug 01 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
JavaScript加强之自定义callback示例
Sep 21 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
jQuery实现表格行上移下移和置顶的方法
May 22 Javascript
js滑动提示效果代码分享
Mar 10 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
Vue 过滤器filters及基本用法
Dec 26 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 Javascript
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
详解JSON.parse和JSON.stringify用法
Feb 18 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根据两点间的经纬度计算距离
2014/10/31 PHP
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
Python中endswith()函数的基本使用
2015/04/07 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
判断单链表中是否存在环
2012/07/16 面试题
linux下进程间通信的方式
2014/12/23 面试题
毕业生物理教师求职信
2013/10/17 职场文书
高中运动会广播稿
2014/01/21 职场文书
群众路线领导对照材料
2014/08/23 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
体育个人工作总结
2015/02/09 职场文书