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 相关文章推荐
让iframe框架网页在任何浏览器下自动伸缩
Aug 18 Javascript
js prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
Oct 10 Javascript
使用jquery插件qrcode生成二维码
Oct 22 Javascript
带有定位当前位置的百度地图前端web api实例代码
Jun 21 Javascript
AngularJS 避繁就简的路由
Jul 01 Javascript
js控制台输出的方法(详解)
Nov 26 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
js下载文件并修改文件名
May 08 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
javascript中的隐式调用
Feb 10 Javascript
JavaScript中的null和undefined用法解析
Sep 30 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 join函数应用
2011/05/04 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
python 图片验证码代码分享
2012/07/04 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python Sleep休眠函数使用简单实例
2015/02/02 Python
简单理解Python中的装饰器
2015/07/31 Python
python之Character string(实例讲解)
2017/09/25 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
《十六年前的回忆》教学反思
2014/02/14 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python
python实现的web监控系统
2021/04/27 Python
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL