vue基础知识点整理

(1) v-for 迭代对象

v-for 可以通过一个对象的属性来迭代数据

 <li v-for="value in object">
    {{ value }}
  </li>

 v-for 可以提供多个索引参数:index代表0.1.2.3;key:代表键;value:代表值。另外v-for="n in 10"可以用来循环整数。

迭代属性输出的之前,v-for会对属性进行升序排序。

迭代默认行为试着不改变整体,而是替换元素。迫使其重新排序的元素,、需要提供一个 key 的特殊属性:

<div v-for="item in items" :key="item.id">  {{ item.text }}</div>
<li v-for="(value, key, index) in object">
     {{ index }}. {{ key }} : {{ value }}
</li>

(2)计算属性

计算属性关键词: computed,处理一些复杂逻辑时是很有用的。

computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
}

 vm.reversedMessage 依赖于 vm.message,在 vm.message 发生改变时,vm.reversedMessage 也会更新。

使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性也可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。

使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性

 computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

var vm = new Vue({
  el: '#app',
  data: {
    name: 'Google',
    url: 'http://www.google.com'
  },
  computed: {
    site: {
      // getter
      get: function () {
        return this.name + ' ' + this.url
      },
      // setter
      set: function (newValue) {
        var names = newValue.split(' ')
        this.name = names[0]
        this.url = names[names.length - 1]
      }
    }
  }
})

(3)watch--监听属性

监听vm中的一个数值,当改数值改变时,其他数据随着修改。基础用法:

 watch : {//此写法首次不执行,数据变化才执行
        kilometers:function(val) {
            this.kilometers = val;
            this.meters = this.kilometers * 1000
        },
        meters : function (val) {
            this.kilometers = val/ 1000;
            this.meters = val;
        }
}

immediate和handler

这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值得时候也执行函数,则就需要用到immediate属性。

比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来得默认值时,也需要执行函数,此时就需要将immediate设为true.

immediate表示在watch中首次绑定得时候,是否执行handler,值为true则表示在watch中声明时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler.

 watch: {
    cityName: {
      handler(newName, oldName) {
        // ...
      },
        deep: true,
      immediate: true
}

deep用法

deep用于对对象深度监听。可以监测到cityName.name等类似属性。当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听一个,可以修改如下:

watch中不要使用箭头函数,即不应该使用箭头函数来定义 watcher 函数 , 因为箭头函数中的this是指向当前作用域。

对于箭头函数来说,箭头函数中的 this 指向的是定义时的对象而不是函数运行时所在的对象,即全局定义时的windows对象。

watch: {
    'cityName.name': {
      handler(newName, oldName) {
      // ...
      },
      deep: true,
      immediate: true
    }
  }

(4)事件处理器

<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联  -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>

<!-- click 事件只能点击一次,2.1.4版本新增 -->
<a v-on:click.once="doThis"></a>

按键修饰符

<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">

<!-- 同上 -->
<input v-on:keyup.enter="submit">
<!-- 缩写语法 -->
<input @keyup.enter="submit">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值