Vue3基础知识总结复习(一) | 青训营笔记

119 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

一、 Vue简介

1.Vue的定位是前端框架,因为它提供了构建用户界面的一整套解决方案

  • vue(核心库)
  • vue-router(路由方案)
  • vuex(状态管理方案)
  • vue组件库(快速搭建页面UI效果的方案)

2.辅助vue项目开发的一系列工具

  • vue-cli(npm全局包,一键生成工程化vue项目,基于webpack)
  • vite(npm全局包:一键生成工程化的vue项目,新一代)
  • vue-devtools(辅助调试)
  • vetur(语法高亮)

3.vue的特性

  • 数据驱动视图
  • 双向数据绑定
  • MVVM

二、vue基本使用步骤

1.导入vue.js的script脚本文件

<script src="./vue-3.1.0.js"></script>

2.页面中声明一个被vue控制的dom区域

<div id="app">{{username}}</div>

3.创建vm实例对象

<script>
    const vm = new Vue({
        el:'#app',
        data:{
            username: 'zs'
        }
    })
</script>

三、vue指令

1.v-bind属性绑定

为元素的属性绑定属性值单向绑定

<input type="text" v-bind:placeholder="inputvalue" />

data:{
    inputvalue: "请输入内容“
}

这样如果inputvalue的值发生变化,则placeholder的属性值也会相应变化,v-bind可以简写为":",即:

<input type="text" :placeholder="inputvalue" />

2.v-on事件绑定

同原生DOM对象的onclick,同来为DOM元素绑定时间监听

<p>{{count}}</p>
<button v-on:click="addCount">+1</button>

data:{
    count: 0
},
methods:{
    addCount(){
        this.count += 1
    }
}

点击按钮之后,dom元素中的count自加一,v-on:click可以简写成@click

<button @click="addCount">+1</button>

3.event事件对象

事件处理函数会接收到一个事件的对象event

<p>{{count}}</p>
<button v-on:click="addCount">+1</button>

data:{
    count: 0
},
methods:{
    addCount(e){
        e.target.style.backgroundColor === 'red' ? '': 'red'
        this.count += 1
    }
}

上述代码,每次点击按钮背景颜色都会在白色和红色之间切换,如果事件参数还需要同时传别的参数,event参数用$event表示

<button @click="addCount(2,$event)">+1</button>

  • 事件修饰符
<a href="#" @click.prevent="addCount(2,$event)">+1</a>
<!-- 阻止a标签原本的跳转行为-->
  • 按键修饰符
<button @keyup.enter="submit" @click="submit">submit</button>
  • 上述代码,监听键盘enter键,如果按下则执行提交方法

4.v-model双向绑定指令

令开发者在不操作dom的情况下,快速获取表单数据,双向绑定

<input type="text" v-model"inputvalue" />

data:{
   inputvalue: "请输入内容"
}
  • 只要data和html两处的属性值有一处发生变化,则两处都会相应变化(双向绑定
  • 只能用于表单元素 ,<div> <p> 之类不可以
  • v-mdel修饰符
<input type="text" v-model.number"inputvalue" /> 
<!-- .number自动转化为数字 -->
<input type="text" v-model.trim"inputvalue" /> 
<!-- .trim自动去除前后多余空格 -->
<input type="text" v-model.lazy"inputvalue" /> 
<!-- .lazy失焦才更新数据 --> 

5.v-if条件渲染指令

  • v-ifv-show,共同控制DOM元素的渲染与否
<p v-if="flag">showed</p>
<button @click="switch">hide/show</button>

data:{
    flag: true
},
methods:{
    switch(){
        this.flag == !this.flag
    }
}

上述代码中,js可以直接写到" "中

<button @click="flag = !flag">hide/show</button>
  • v-ifv-show的区别
    • v-if动态地创建或移除DOM元素
    • v-show会动态为元素添加或移除style="display:none;"样式
    • v-if有更高的切换开销,而v-show有更高的初始渲染开销
  • v-elsev-if配合使用
    <p v-if="flag">showed1</p>
    <p v-else>showed2</p>
  • 还可以使用v-else-if
    <p v-if="flag">showed1</p>
    <p v-else-if="flag && flag2">showed2</p>
    <p v-else>showed2</p>

6.v-for列表渲染指令

  • 基于数组循环渲染相似的UI结构
    <ul>
        <li v-for="user in list">{{user.name}}</li>
    </ul> 
data:{
    list:[
        {id: 1, name: 'zs'},
        {id: 2, name: 'lisi'}
    ]
  }
  • 支持可选的第二个参数索引index,由零开始
  <li v-for="(user,index) in list">{{user.name}}</li>
  • v-for中包括index在内的参数都是形参,均可重命名
  • vue会尽可能的复用已存在的DOM元素,如果不指定唯一的key,则会导致列表状态无法被正确更新,所以要加上。
  <li v-for="(user,index) in list" :key=user.id</li>
  • key值注意事项
    • 只能为数字或字符串
    • 具有唯一性,不能重复
    • 使用index作为key没有任何意义
    • 以后每次使用v-for都要指定key,只有好处,提升效率,防止紊乱