Vue 构造选项 - 进阶使用说明


Posted in Javascript onAugust 14, 2020

Directive指令:减少DOM操作的重复

Vue实例/组件用于数据绑定、事件监听、DOM更新

Vue指令主要目的就是原生DOM操作

减少重复

自定义指令

两种声明方式

方法一:声明一个全局指令

Vue.directive('x', directiveOptions)

方法二:声明一个局部指令

在options里写,只能被那个Vue实例/组件使用

new Vue({
  ...,
  directives:{
    "x":directiveOptions
  }
})

关于directiveOptions

directiveOptions是个对象,里面有五个函数属性

bind(el, info, vnode, oldVnode)★

类似created,只调用一次,指令第一次绑定到元素时调用。

参数都是vue给我们的

el绑定指令的那个元素

info是个对象,我们想要的信息基本都在里面

vnode虚拟节点

oldVnode之前的虚拟节点

inserted(参数同上)★

类似mounted,被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

update(参数同上)

类似 updated

componentUpdated(参数同上)

用得不多,见文档

unbind(参数同上)★

类似destroyed,当元素要消亡时调用。

bind示例

Mixins混入:复制

Mixins示例

减少重复

directives的作用是减少DOM操作的重复

mixins的作用是减少data、methods、钩子的重复

options里的构造选项都可以先放到一个js文件,之后哪个实例/组件需要就导入并且用mixins使用就行。

写在了共同东西里的东西被组件引用了之后,组件还可以覆盖他们,Vue会智能合并

全局的mixins:不推荐

Extends 继承、扩展

extends是比mixins更抽象一点的封装

如果你嫌写五次mixins麻烦,可以考虑extends一次

不过实际工作中用得很少

你可以使用Vue.extend或options.extends

provide & inject:提供&注入

祖先提供东西,后代注入东西

作用是大范围、隔N代共享信息(data、methods等)

示例

总结

directive指令

全局用Vue.directive('x', {...})

局部用options.directives

作用是减少DOM操作相关重复代码

mixins混入

全局用Vue.mixin({..})

局部用options.mixins: [mixin1, mixin2]

作用是减少options里的重复

extends继承/扩展

全局用Vue.extend({.})

局部用options.extends: {...}

作用跟mixins差不多,只是形式不同

provide | inject提供和注入

祖先提供东西,后代注入东西

作用是大范围、隔N代共享信息

补充知识:表单和 v-model

思维导图

Vue 构造选项 - 进阶使用说明

form 做表单一定要用 form+button组合

<template>
  <div id="app">
    登录
    <form @submit.prevent="onSubmit">  //.prevent阻止默认动作
      <label>
        <span>用户名</span>
        <input type="text" v-model="user.username"/>
      </label>
      <label>
        <span>密码</span>
        <input type="password" v-model="user.password"/>
      </label>
      <button type="submit">
        登录
      </button>
    </form>

  </div>
</template>

<script>
 export default {
  name: 'App',
  data() {
   return {
    user: {
     username: '',
     password: ''
    },
    x: ''
   }
  },
  methods: {
   onSubmit() {
    console.log(this.user)
   }
  },
  components: {}
 }
</script>

Vue 构造选项 - 进阶使用说明

v-model

<label>
        <span>用户名</span>
        <input type="text" v-model="user.username"/>
</label>

上面的v-model等价于

<label>
        <span>用户名</span>
        <input type="text" :value="user.username"
        @input = "user.username = $event.target.value"/>
</label>

自己封装一个

<template>
  <div class="red wrapper">
    <input :value="value" @input="$emit('input',$event.target.value)"/>
  </div>
</template>

<script>

 export default {
  name: 'MyInput',
  props: {
   value: {
    type: String
   }
  },
 }
</script>

<style scoped>
  .red {
    background: red;
  }
  .wrapper{
    display: inline-block;
  }
</style>

以上这篇Vue 构造选项 - 进阶使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 可以拖动的DIV(二)
Jun 26 Javascript
jquery 简单导航实现代码
Sep 11 Javascript
jQuery 版元素拖拽原型代码
Apr 25 Javascript
Jquery中offset()和position()的区别分析
Feb 05 Javascript
JS基于Mootools实现的个性菜单效果代码
Oct 21 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
jquery表单验证插件validation使用方法详解
Jan 20 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
Mar 20 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
May 03 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
Sep 12 Javascript
javascript使用正则表达式实现注册登入校验
Sep 23 Javascript
如何在JavaScript中等分数组的实现
Dec 13 Javascript
vue 扩展现有组件的操作
Aug 14 #Javascript
如何HttpServletRequest文件对象并储存
Aug 14 #Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
Aug 14 #Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 #Javascript
vue在App.vue文件中监听路由变化刷新页面操作
Aug 14 #Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
Aug 14 #Javascript
在vue中封装方法以及多处引用该方法详解
Aug 14 #Javascript
You might like
一篇入门的php Class 文章
2007/04/04 PHP
js下函数般调用正则的方法附代码
2008/06/22 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
php基本函数汇总
2015/07/09 PHP
PHP6新特性分析
2016/03/03 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
学习ExtJS form布局
2009/10/08 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
python集合用法实例分析
2015/05/30 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
汽车维修工岗位职责
2014/02/12 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
班主任工作总结范文
2015/08/13 职场文书
导游词之镇江焦山
2019/11/21 职场文书