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 相关文章推荐
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
分享十五个最佳jQuery 幻灯插件和教程
Mar 27 Javascript
iframe 异步加载技术及性能分析
Jul 19 Javascript
node.js中的fs.lchownSync方法使用说明
Dec 16 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
Oct 09 Javascript
在JavaScript中对HTML进行反转义详解
May 18 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
Apr 07 Javascript
Vue.js组件props数据验证实现详解
Oct 19 Javascript
VUE 实现element upload上传图片到阿里云
Aug 12 Javascript
jQuery实现手风琴特效
Jan 11 jQuery
详解Javascript实践中的命令模式
May 05 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python关键字and和or用法实例
2015/05/28 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
医学生实习自荐信
2013/10/01 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
慰问信范文
2015/02/14 职场文书
银行自荐信范文
2015/03/25 职场文书
2015年安全月活动总结
2015/03/26 职场文书
清明节主题班会
2015/08/14 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书