详解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中检查对象property的存在性方法介绍
Dec 30 Javascript
Position属性之relative用法
Dec 14 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
Javascript动画效果(1)
Oct 11 Javascript
jQuery tip提示插件(实例分享)
Apr 28 jQuery
用JS实现简单的登录验证功能
Jul 28 Javascript
js实现单张图片平移切换效果
Oct 11 Javascript
Vue.js实现图片的随意拖动方法
Mar 08 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
createObjectURL方法实现本地图片预览
Sep 30 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
Zerg剧情介绍
2020/03/14 星际争霸
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
jquery 插件开发方法小结
2009/10/23 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
让python json encode datetime类型
2010/12/28 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
python名片管理系统开发
2020/06/18 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
基于Python正确读取资源文件
2020/09/14 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
文案策划求职信
2014/04/14 职场文书
合伙协议书范本
2014/04/21 职场文书
实习单位评语
2014/04/26 职场文书
论文诚信承诺书
2014/05/23 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
给校长的一封检讨书
2014/09/20 职场文书
检讨书1000字
2014/10/11 职场文书
模范班主任事迹材料
2014/12/17 职场文书
医院病假条怎么写
2015/08/17 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP