Vue学习笔记-Day3 - vue列表渲染、事件监听、表单绑定

Day3 - vue列表渲染、事件监听、表单绑定

列表渲染

1 基本使用

使用v-for进行循环渲染

 	<ul>
        <li v-for="(item,index) in books">
          <!-- {{index}}-{{item.name}}<br> -->
          <span v-for="(value,name,index) in item">
            {{value}} - {{name}} - {{index}}
          </span>
        </li>
      </ul>

v-for可以遍历数组,也可以遍历对象,并且可以有多个参数,当遍历数组时多用的两个参数分别为 : 对象、索引(这是因为我此处遍历的对象数组)。当遍历对象的时候,有三个参数可选分别为:值,属性名,索引,值得注意的是 由于对象是无序的,所以在不同的Javascript引擎下,遍历出来的先后顺序可能是不一样的。

2 检测更新

当vue在更新使用v-for渲染元素列表的时候,他默认的使用的是‘就地更新’策略,什么是就地更新策略呢?

在这里插入图片描述
比如我们需要插入一个f元素,那么Vue的操作就是这样的,将 原来的 b 更新为 f,将 c 更新为 b,将 d 更改为 c ,依次类推下去,然后再插入一个新元素赋值为d,这样vue就会尽可能多的复用元素,减少动态元素。

那么如果不想要复用元素,而直接进行重新排列元素的顺序呢?那么可以通过使用 key,vue会根据key的顺序变化重新进行排序,并且移除key不存在的元素。需要注意的尽量不要使用非基本类型作为key的值,尽量使用字符串或者数值类型的值

 	<ul>
        <li v-for="(item,index) in books" :key="item.name">
          {{index}}-{{item.name}}<br>
        </li>
      </ul>

3 数组的响应方法

Vue对侦听数组的编译方法进行了包裹,所以调用这些方法的时候,也会触发视图更新,即响应式方法:

push()

pop()

shift() //再头插入

unshift()//删除头

splice()//可以传多个参数,一个表示开始位置,第二个表示需要操作的元素个数,第三个以及后面的,作为需要插入的元素,splice可以用来删除、替换元素,是一个很方便的函数

sort()//对数组进排序

reverse()//反转元素


非响应式方法:这些方法都不会改变原数组的值,会生成一个新数组

filter()//过滤数组中的元素

concat()//合并两个数组

slice()//截取数组中的元素,两个参数 start、end。end是可选的,如果start为负数,则从尾部截取


注意:

直接使用下标去更新数组的元素不会触发视图变更:例如:vm.items[0] = newValue

修改数组长度的时候也不会:例如:vm.items.length = newLength

替换方法:

vm.$set(vm.item,index,newValue)

vm.item.splice(index,1,newValue);

vm.items.splice(newLength)

事件监听

1 v-on 监听dom

<button v-on:click="changePrice"></button>
<button @click="changePrice"></button>//v-on语法糖为@

这里补充一下关于v-on的参数传递:

 <button v-on:click.stop="havenotProperty">不带参数例子</button>
 <button v-on:click.stop="haveProperty">带参数例子</button>
 <button v-on:click.stop="haveProperty()">带参数括号例子</button>
 <button v-on:click.stop="haveProperty($event)">带参数括号例子</button>  

  havenotProperty(){
  },
  haveProperty(val){
       console.log(val);
  },

在这里插入图片描述

不带参数的函数在调用的时候,可以省略括号

带参数的函数,如果省略括号,默认传的是vue生成的event对象作为参数,如果带括号的但是不传参数,则显示undefined,还有一种情况就是将event对象作为参数传递,则直接使用$event

2 事件修饰符

.stop 阻止事件冒泡

.pervent 组织默认事件

.native 监听组件的原生事件

.passive 默认行为立即被触发

 <div v-on:click.stop="changePrice"></div>

3 按键修饰符

.enter

.tab

.delete

.esc等等

4系统修饰符

.ctrl .alt .shift .meta(windows键)

.exact //精确控制符,只能输入某个键触发,输入多的行 ,例如: 监听enter键,那么输入enter+c不行

鼠标修饰符:

.left .right .middle

表单输入绑定

1 使用v-model进行数据的双向绑定

 <!-- 简化后,直接使用v-model进行双向绑定 -->
      <label>v-model双向绑定</label>
      <input type="text" v-model="name">
      {{name}}
      <br>
 <!-- 简化前,使用v-bind绑定name参数到input,再使用v-on监听input的输入事件,并在输入事件中将输入值赋值给name参数 -->
      <label>双向绑定原理</label>
      <input type="text" :value="lname" v-on:input="valChange">
      {{lname}}
      
 methods:{
   valChange(val){
      this.lname = val.target.value;
   },
 }

一个v-model相当于是 v-bind和v-on的组合,最终实现的效果是一样的

2 常用表单组件的实现

 <!-- 实现单选按钮 -->
      <input type="radio" v-model="sex" value="男"><input type="radio" v-model="sex" value="女">{{sex}}
      <br>
      <!-- 实现复选框的单选按钮 -->
      <input type="checkbox" v-model="agreement">是否同意协议
      {{agreement}}
      <br>
      <!-- 实现复选框的多选按钮 -->
      <input type="checkbox" value="篮球" v-model="sports">篮球
      <input type="checkbox" value="乒乓球" v-model="sports">乒乓球
      <input type="checkbox" value="羽毛球" v-model="sports">羽毛球
      {{sports}}
      <br>
      <!-- 实现选择框单选 -->
      <label>你喜欢运动吗?</label>
      <select v-model="homework">
        <option v-for="item in chooseOptions" :value="item">{{item}}</option>
      </select>
      {{homework}}
      <br>
       <!-- 实现选择框多选 -->
       <label>你喜环吃什么?</label>
       <select v-model="foods" multiple>
        <option v-for="item in foodsOptions" :value="item">{{item}}</option>
      </select>
      {{foods}}


//data中定义数据
	data:{
          sex:'男',
          agreement: false,
          sports:[],
          homework:"",
          foods:[],
          foodsOptions:["苹果",'香蕉','梨子','柑橘'],
          chooseOptions:['是','否'],
        },

3 修饰符

.lazy // 对于input框的值不进行实时同步,等输入完成后触发enter等再同步

.number //类型为数字

.trim //去掉前后空格

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值