Vue2常用api

官网

全局配置


// 阻止vue在启动时生成生产提示,一般脚手架自带这个配置
Vue.config.productionTip = false; 
// 捕获错误信息和Vue实例
Vue.config.errorHandler = function (err, vm, info) {}

全局API


Vue.use(plugin) // 安装插件
Vue.extend()  // 创建"子类",参数是一个包含组件选项的对象
Vue.nextTick(() => {}) // 在下次DOM更新循环结束之后执行延迟回调
Vue.set(target,index/propertyName, value) // 添加响应式新属性
Vue.directive('my-directive', {})// 注册自定义指令
Vue.filter('my-filter', ()=>{}) // 注册全局过滤器
Vue.component('my-component', {}); // 注册全局组件
Vue.mixin(object) // 注册全局混入
Vue.observable() // 让一个对象可响应

数据绑定

{{}}类似于Mustache语法,里面的值最终都会当作字符串来处理

1、插值

 {{a}}  a变化时,文本的值也会变化

2、表达式

 {{a / 100}}
 {{true? 1 : 0}}
 {{str.split(",")}}

3、过滤器

 {{a | filterA | filterB}}
 {{a | filter a b}}

数据相关配置

  • 所有选项都不能使用箭头函数,因为箭头函数绑定了父级作用域的上下文,this不会按照期望指向Vue实例,this.xx将是undefined

data

顶级组件object,其他组件都是function,因为一个组件可能被用来创建多个实例,如果不是函数的话,则多个实例将会共享这一个数据对象,造成数据污染。


data() {
  return {
    data1: 1,
    data2: 2,
  }
}

props

用于接收父组件的数据,可以是数组形式,也可以是对象形式


props:['msg1','msg2']
props:{
  msg1: Number,
  msg2: {
    type: Number,
    default: 0,
    required: true,
    validator: function(value) {
      return value > 0
    }
  }
}

propsData

只用于new创建的实例中,即顶层的实例


var vm = new Vue({
  propsData:{
    msg: '11'
  }
})

computed

计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。


computed: {
  doubleMsg1: vm => vm.a * 2,
  doubleMsg2() {
    return this.msg * 2;
  },
  // 计算属性默认只有 getter,不过在需要时你也可以提供一个 setter:
  doubleMsg3: {
    get(){
      return this.msg * 2;
    }
    set(newValue){
      // newValue即getter的值
      // 数据变动时执行
    }
  }
}

methods

  • 用于封装函数,this.xx()可直接使用

watch

  • 一个对象,键是需要观察的表达式,值是对应的回调函数/方法名/对象


watch: {
  msg1: (newValue, oldValue) => {}
  msg2: 'someMethod',
  msg3: {
    handler: 'someMethod'
    immediate: true,  // 侦听开始后立即调用
    deep: true // 无论对象属性嵌套多深,都会侦听到
  },
  // 你可以传入回调数组,它们会被逐一调用
  msg4: [
    'handler1'
    function handler2(newValue, oldValue) {},
    {
      handler: function handler3(newValue, oldValue) {},
    }
  ]
}

指令

指令就是当其表达式的值改变时把某些特殊的行为应用到DOM上面。

v-once

只执行一次,数据改变时,插值内容不更新

<div v-once>{{msg}}</div>

v-html

插入html

<!-- div标签会被msg的标签替换 -->
<div v-html="msg"></div>

v-text

插入普通文本

<div v-html="msg"></div>

v-if

生成或移除一个元素,存在局部编译或卸载的过程

<!-- 生成该元素 -->
<div v-if="true"></div>
<!-- 移除该元素 -->
<div v-if="false"></div>

v-show

隐藏或显示一个元素,本质上是通过内联样式display来控制

<!-- 显示该元素 -->
<div v-show="true"></div>
<!-- 隐藏该元素 -->
<div v-show="false"></div>

v-else

必须跟着v-if,充当else的功能

<!-- 显示该元素 -->
<div v-if="1==2"></div>
<div v-else></div>

v-show用在组件上时,由于指令优先级问题v-else会出现问题

v-model

用来在表单控件元素上创建双向数据绑定,根据控件类型自动选取正确的方法更新元素

<input type="text" v-model="username" />
<input type="radio" name="sex" v-model="sex" />
<input type="radio" name="sex" v-model="sex" />
<input type="checkbox" value="a" v-model="interest" />
<input type="checkbox" value="b" v-model="interest" />
<input type="checkbox" value="c" v-model="interest" />
<select v-model="sel">
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
</select>

v-for

遍历渲染元素

<div v-for="(item, index) in arr" :item="item" :key="index"></div>

和html的属性进行绑定,

<div v-on:click="add"></div>
<!-- 动态参数 -->
<div v-on:[curEvent]="add"></div>
<!-- 简写形式 -->
<button @click="add"></button>

v-bind

和html的属性进行绑定,

<div v-bind:disabeld="isDisabled"></div>
<!-- 动态参数 -->
<div v-bind:[msg1]="msg2"></div>
<!-- 简写形式 -->
<div :disabeld="isDisabled"></div>
<div :[msg1]="msg2"></div>

和Class绑定

<div :class="normal"></div>
<div :class="{active: isActive, danger: isError}"></div>
<div :class="[isActive, isError]"></div>

和style绑定

<div :style="{background:isBlack?'black':'white'}"></div>
<div :style="styleData"></div>

v-on

和html的属性进行绑定,

<div v-on:click="add"></div>
<!-- 动态参数 -->
<div v-on:[curEvent]="add"></div>
<!-- 简写形式 -->
<button @click="add"></button>

v-slot

用于具名插槽

v-pre

跳过该标签和其子元素的编译过程,显示原始Mustache标签,加快编译

<span v-pre>{{ this will not be compiled }}</span>

v-cloak

不会显示,直到编译结束。

<div v-cloak>{{ message }}</div>

修饰符

number 将用户的输入转换为数字类型(如果转换结果是NaN时,则返回原值);

<input type="text" v-model.number="username" />

lazy input事件改到change事件中发生

<!-- input失焦时,username数据才会改变 -->
<input type="text" v-model.lazy="username"/>

debounce 延迟同步数据

<!-- username数据在5000ms后发生改变 -->
<input type="text" v-model="username" debounce="5000" />

prevent

<!-- 调用event.preventDefault -->
<div @click.prevent="add"></div>

生命周期钩子


beforeCreate  //实例初始化完成,但是各配置还未进行
created // watch\method\computed已被配置完成,但未进行挂载
beforeMounted // 挂载之前,render首次被调用
mounted // 已挂载完成,但是不能保证子组件都渲染完成,如果需要可以调用nextTIck
beforeUpdate  // 数据发生改变,DOM被更新之前调用
updated // 数据改变导致虚拟DOM重新渲染和更新后被调用,也同样不能保证子组件都渲染完成
activated // 被缓存的组件激活时调用
deactivated // 被缓存的组件失活时被调用
beforeDestroy // 实例销毁前使用
destroyed // 实例销毁后
errorCaptured // 捕获后代组件的错误时被调用

组合

(parent、provide见组件相关知识点)

parent/children

  • 父子传值,应急方法,更推荐使用props和events

provide/inject

  • 跨级传值

mixins

  • 接收一个混入对象的数组。可以和正常的实例对象使用一样的实例选项,如生命周期勾子、computed等,

  • Mixin 钩子按照传入顺序依次调用,并在调用组件自身的钩子之前被调用。


var mixin = {
  created: function () { console.log(1) }
}
var vm = new Vue({
  created: function () { console.log(2) },
  mixins: [mixin]
})

extends

  • 允许声明扩展另一个组件 (可以是一个简单的选项对象或构造函数),而无需使用

  • 和mixins类似


var CompA = { ... }
// 在没有调用 `Vue.extend` 时候继承 CompA
var CompB = {
  extends: CompA,
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[chao]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值