• vue常用指令


    目录

    1、插值表达式

    2、绑定数据和元素属性 v-bind

    3、v-on绑定事件

    4、处理时间对象e

    5、v-on事件修饰符

    6、v-on按键修饰符

    7、v-model 双向事件绑定

    8、v-model的修饰符

    9、v-text和v-html

    10、v-show和v-if

    11、v-for

    12、v-for更新检测

    13、动态class

    14、动态style

    15、过滤器

    16、计算属性 computed

    17、侦听器

    18、侦听器深度执行和立即执行


    1、插值表达式

    • 案例:在dom标签中,直接插入vue数据变量,将vue数据变量直接显示在标签内
    • 又称:声明式渲染/文本插值
    • 语法:{{表达式}}
    • msg和obj是vue数据变量
    • 要在js中data函数里声明
    1. <template>
    2. <div>
    3. <h1>{{ msg }}</h1> // 可以写普通变量
    4. <h2>{{ obj.name }}</h2> // 也可以写对象
    5. <h3>{{ obj.age >18 ?'成年':'未成年'}}</h3> // 也可以写判断条件
    6. </div>
    7. </template>
    8. <script>
    9. export default {
    10. data() {
    11. return {
    12. msg: "hello vue",
    13. obj: {
    14. name: "小vue",
    15. age: 5
    16. }
    17. }
    18. }
    19. }
    20. </script>

    2、绑定数据和元素属性 v-bind

    作用:给标签属性设置Vue变量的值

    v-bind语法和简写:

    • 语法:v-bind:属性名="vue变量"
    • 简写::属性名="vue变量"

    我是a标签

    1. <template>
    2. <div>
    3. <!-- 语法:v-bind:原生属性名="vue变量" -->
    4. <a v-bind:href="url"></a>
    5. <!-- 语法::原生属性名="vue变量" -->
    6. <img :src="imgUrl">
    7. </div>
    8. </template>
    9. <script>
    10. export default{
    11. // 准备变量
    12. data(){
    13. return{
    14. url: 'http://www.baidu.com',
    15. imgUrl: 'http://www.baidutupian.com'
    16. }
    17. }
    18. }
    19. </script>

    3、v-on绑定事件

    语法:

    • v-on:事件名="要执行的少量代码"
    • v-on:事件名="methods中的函数名"
    • v-on:事件名="methods中的函数名(实参)"
    1. <p>你要买商品的数量:{{count}}</p>
    2. <button v-on:click="count = count + 1">增加1</button>
    3. <button v-on:click="addFn">增加1</button>
    4. <button v-on:click="addCountFn(5)">一次加5</button>

     v-on也可以简写成@

    语法:

    • @事件名= "methods中的函数"

    4、处理时间对象e

    语法:

    • 无传参,通过形参直接接收
    • 传参,通过$event指代时间对象传给时间处理函数
    1. <template>
    2. <div>
    3. <a @click="one" href="http://www.baidu.com">阻止百度</a>
    4. <hr>
    5. <a @click="two(10, $event)" href="http://www.baidu.com">阻止去百度</a>
    6. </div>
    7. </template>
    8. <script>
    9. export default{
    10. methods:{
    11. one(e){
    12. e.preventDafault()
    13. },
    14. two(num,e){
    15. e.preventDafault()
    16. }
    17. }
    18. }
    19. </script>

    5、v-on事件修饰符

    语法:

    • @事件名.修饰符="methods里的函数"

    修饰符列表:

    • .stop :阻止事件冒泡
    • .prevent :阻止默认行为
    • .once :程序运行期间,只触发一次时间处理函数
    1. <template>
    2. <div @click="fatherFn">
    3. <!-- vue对事件进行了修饰符设置,在事件后面.修饰符名即可使用更多的功能 -->
    4. <button @click.stop="btn">.stop阻止事件冒泡</button>
    5. <a href="http://www.baidu.com" @click.prevent="btn">.prevent阻止默认行为</a>
    6. <button @click.once="btn">.once程序运行期间,只触发一次事件处理函数</button>
    7. </div>
    8. </template>

    6、v-on按键修饰符

    语法:

    • @keyup.enter:监测回车按键
    • @keyup.esc:监测返回按键
    1. <template>
    2. <div>
    3. <input type="text" @keydown.enter="enterFn">
    4. <hr>
    5. <input type="text" @keydown.esc="escFn">
    6. </div>
    7. </template>
    8. <script>
    9. export default {
    10. data() {
    11. return {
    12. msg: "hello vue",
    13. obj: {
    14. name: "小vue",
    15. age: 20
    16. }
    17. }
    18. },
    19. methods:{
    20. enterFn(){
    21. console.log("用户按下了回车键")
    22. },
    23. escFn(){
    24. console.log("用户按下了返回键")
    25. }
    26. }
    27. }
    28. </script>

    7、v-model 双向事件绑定

    语法:

    • v-model="Vue数据变量"

    双向数据绑定:

    • 变量变化->视图自动同步
    • 视图变化->变量自动同步

    例:注册表单,了解v-model在各种表单标签如何使用

    1. <template>
    2. <div>
    3. <span>用户名:</span>
    4. <input type="text" v-model="username">
    5. <br>
    6. <span>密码:</span>
    7. <input type="password" v-model="password">
    8. <br>
    9. <!-- 下拉菜单,v-model需要写在select标签上 -->
    10. <span>来自于:</span>
    11. <select v-model="from">
    12. <option value="北京">北京</option>
    13. <option value="上海">上海</option>
    14. <option value="广州">广州</option>
    15. <option value="深圳">深圳</option>
    16. </select>
    17. <br>
    18. <!--
    19. 遇到复选框,v-model的变量值
    20. 非数组:关联的是复选框的checked属性
    21. 数组:关联的是复选框的value属性
    22. -->
    23. <span>爱好:</span>
    24. <input type="checkbox" value="篮球" v-model="hobby">篮球
    25. <input type="checkbox" value="足球" v-model="hobby">足球
    26. <input type="checkbox" value="羽毛球" v-model="hobby">羽毛球
    27. <br>
    28. <span>性别:</span>
    29. <input type="radio" value="男" name="sex" v-model="gender">
    30. <input type="radio" value="女" name="sex" v-model="gender">
    31. </div>
    32. </template>
    33. <script>
    34. export default {
    35. data() {
    36. return {
    37. username: "",
    38. password: "",
    39. from: "",
    40. // 如果是非数组hobby:"",则关联的是checked属性 false或者true
    41. hobby: [],
    42. gender:""
    43. }
    44. }
    45. }
    46. </script>

     注意点:

    • v-model是写在select,value在option上
    • v-model用在复选框时,非数组关联的是checkd属性,数组关联的是value属性
    • vue变量初始值会影响表单的默认状态,因为双向数据绑定是互相影响的

    8、v-model的修饰符

    语法:v-model.修饰符 = "Vue数据变量"

    • .number:以parseFloat抓成数字类型候,把值赋予给Vue数据变量
    • .trim:去除首尾空白字符后,把值赋予给Vue数据变量
    • .lazy:在change时触发而非input时,等表单失去焦点时把值赋予给Vue数据变量
    1. <template>
    2. <div>
    3. <!-- .trim修饰符,会去掉首尾空白字符 -->
    4. <span>姓名:</span>
    5. <input type="text" v-model.trim="name">
    6. <br>
    7. <!-- .number修饰符,以parseFloat抓成数字类型 -->
    8. <span>年龄:</span>
    9. <input type="text" v-model.number ="age">
    10. <br>
    11. <!-- .lazy修饰符在change时触发而非input时,
    12. 在此处表现为失去焦点时把内容同步给v-model的变量 -->
    13. <span>个人介绍:</span>
    14. <input type="text" v-model.lazy ="intro">
    15. </div>
    16. </template>
    17. <script>
    18. export default {
    19. data(){
    20. return{
    21. name:"",
    22. age:"",
    23. intro:""
    24. }
    25. }
    26. }
    27. </script>

    9、v-text和v-html

    语法:

    • v-text="Vue数据变量"
    • v-html="Vue数据变量"
    1. <template>
    2. <div>
    3. <p v-text="str"></p>
    4. <p v-html="str">{{10 + 20}}</p>
    5. <!-- 注意:v-text或v-html会覆盖插值表达式 -->
    6. </div>
    7. </template>
    8. <script>
    9. export default {
    10. data(){
    11. return{
    12. str:"我是一个span标签"
    13. }
    14. }
    15. }
    16. </script>

     注意点:

    • v-text或v-html会覆盖插值表达式

    10、v-show和v-if

    作用:控制标签的隐藏和出现

    语法:

    • v-show="Vue变量"
    • v-if="Vue变量"

    原理:

    • v-show用的display:none隐藏(频繁切换使用)
    • v-if直接从DOM树上移除

    高级:

    • v-else的使用
    1. <template>
    2. <div>
    3. <!--
    4. v-show隐藏:采用display:none // 频繁切换
    5. v-if隐藏:采用从DOM树直接移除 // 移除
    6. -->
    7. <h1 v-show="isShow">我是h1</h1>
    8. <h2 v-if="isIf">我是h2</h2>
    9. <!-- v-if和v-else的使用 -->
    10. <p v-if="age >= 18">成年了</p>
    11. <p v-else>未成年</p>
    12. </div>
    13. </template>
    14. <script>
    15. export default {
    16. data(){
    17. return{
    18. isShow:false,
    19. isIf:false,
    20. age:16
    21. }
    22. }
    23. }
    24. </script>

    11、v-for

    作用:列表渲染,所在标签结构,按照数据数量,循环生成

    语法:

    • v-for="(值变量,索引变量)in 目标结构"
    • v-for="值变量 in 目标结构"

    目标结构:

    • 可以遍历数组/对象/数字
    1. <template>
    2. <div>
    3. <ul>
    4. <li v-for="(item,index) in arr" :key=index>
    5. {{item}}
    6. li>
    7. ul>
    8. div>
    9. template>
    10. <script>
    11. export default {
    12. data(){
    13. return{
    14. arr:["小明","小刚","小亮","小杰"]
    15. }
    16. }
    17. }
    18. script>

    12、v-for更新检测

    情况1:数组翻转

    情况2:数组截取

    情况3:更新值

    口诀:

    • 数组变更方法,就会导致v-for更新,页面更新(比如:push,pop,shift,unshift,splice,sort,reverse)
    • 数组非变更方法,返回新数组,就不会导致v-for更新,可采用覆盖数组或this.$set(比如:filter,concat,slice)
    1. <template>
    2. <div>
    3. <ul>
    4. <li v-for="(val,index) in arr" :key=index>
    5. {{val}}
    6. </li>
    7. </ul>
    8. <button @click="revBtn">数组翻转</button><br>
    9. <button @click="sliceBtn">截取前3个字符(1</button><br>
    10. <button @click="updateBtn">更新第1个值(1</button><br>
    11. <button @click="fugaiBtn">截取前3个字符(2</button><br>
    12. <button @click="thisSetBtn">更新第1个值(2</button><br>
    13. </div>
    14. </template>
    15. <script>
    16. export default {
    17. data(){
    18. return{
    19. arr:[1,2,3,4,5]
    20. }
    21. },
    22. methods:{
    23. revBtn(){
    24. // 1.数组翻转可以让v-for更新
    25. this.arr.reverse()
    26. },
    27. sliceBtn(){
    28. // 2.数组slice方法不会造成v-for更新
    29. this.arr.slice(0,3)
    30. },
    31. updateBtn(){
    32. // 3.更新某个值的时候,v-for是检测不到的
    33. this.arr[0] = 1000
    34. },
    35. // 数组非变更方法如果想要返回新数组,使得v-for更新,可采用覆盖数组或this.$set
    36. fugaiBtn(){
    37. // 解决v-for更新 - 覆盖原始数组
    38. let newArr = this.arr.slice(0,3)
    39. this.arr = newArr
    40. },
    41. thisSetBtn(){
    42. // 解决v-for更新 - this.$set()
    43. // 参数1:更新目标结构
    44. // 参数2:更新位置
    45. // 参数3:更新值
    46. this.$set(this.arr, 0, 1000)
    47. }
    48. }
    49. }
    50. </script>

    13、动态class

    作用:给标签class设置动态的值

    语法:

    • :class="{类名:布尔值}"   // true使用,false不使用
    1. <template>
    2. <div>
    3. <!--
    4. 语法::class="{类名:布尔值}"
    5. 使用场景:vue变量控制标签是否应该有类名
    6. -->
    7. <p :class="{red_str: bool}">动态class</p>
    8. </div>
    9. </template>
    10. <script>
    11. export default {
    12. data(){
    13. return{
    14. bool: true
    15. }
    16. }
    17. }
    18. </script>
    19. <style>
    20. .red_str{
    21. color: red;
    22. }
    23. </style>

    14、动态style

    作用:给标签动态设置style的值

    语法:

    • :style="{css属性名:值}"
    1. <template>
    2. <div>
    3. <!--
    4. 动态style语法:
    5. :style="{css属性名:值}"
    6. -->
    7. <p :style="{color: textColor}">动态style</p>
    8. </div>
    9. </template>
    10. <script>
    11. export default {
    12. data(){
    13. return{
    14. textColor :'red'
    15. }
    16. }
    17. }
    18. </script>

    15、过滤器

    作用:转换格式,过滤器就是一个函数,传入值返回处理后的值
    使用场景:

    • 字符串翻转,输入“hello,world”,输出“dlrow,olleh”
    • 字母转大写,输入“hello”,输出“HELLO”

    语法:

    • Vue.filter("过滤器名", (值) => {return "返回处理后的值"})
    • filter:{过滤器名: (值) => {return "返回处理后的值"}}

    (1)全局过滤器

    main.js

    1. import Vue from 'vue'
    2. import App from './App.vue'
    3. Vue.config.productionTip = false
    4. // 方式1:全局过滤器
    5. // 任意的.vue文件内“直接”使用
    6. // 语法:Vue.filter("过滤器名": 值 => 处理结果)
    7. Vue.filter("reverse" , val => val.split("").reverse().join(""))
    8. new Vue({
    9. render: h => h(App),
    10. }).$mount('#app')

    App.vue

    1. <template>
    2. <div>
    3. <p>原来的样子{{msg}}p>
    4. <p>翻转后的样子:{{ msg | reverse}}p>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. data(){
    10. return{
    11. msg : "hello,world"
    12. }
    13. }
    14. }
    15. script>
    16. <style>
    17. style>

    (2)局部过滤器 

    1. <template>
    2. <div>
    3. <p>原来的样子{{msg}}</p>
    4. <!-- 2. 过滤器的使用
    5. 语法:{{ 值 | 过滤器名字 }}
    6. -->
    7. <p>翻转后的样子:{{ msg | reverse}}</p>
    8. <p :title="msg | toUp">鼠标长停</p>
    9. </div>
    10. </template>
    11. <script>
    12. export default {
    13. data(){
    14. return{
    15. msg : "hello,world"
    16. }
    17. },
    18. methods:{},
    19. // 方式2:局部过滤器
    20. // 只能在vue文件中使用
    21. /*
    22. 语法:
    23. filter: {
    24. 过滤器名字 (val) {
    25. return 处理后的值
    26. }
    27. }
    28. */
    29. filters: {
    30. toUp(val) {
    31. return val.toUpperCase
    32. }
    33. }
    34. };
    35. </script>
    36. <style>
    37. </style>

    (3)多过滤器

    作用:可同时使用多个过滤器,或者给过滤器传参

    语法:

    • 过滤器传参:vue变量 | 过滤器(实参)
    • 多个过滤器:vue变量 | 过滤器1 | 过滤器2
    1. <template>
    2. <div>
    3. <p>使用翻转过滤器:{{msg | reverse('-')}}p>
    4. <p :title="msg | toUp | reverse('-')">鼠标长停p>
    5. div>
    6. template>

    16、计算属性 computed

    (1)简单写法

    使用场景:一个变量的值,依赖另外一些数据计算而来的结果

    语法:

    computed: {

    "计算属性名" (){

    return "值"

        }

    }

    1. <template>
    2. <div>
    3. <p>和为:{{ num }}</p>
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. data(){
    9. return{
    10. a:10,
    11. b:20
    12. }
    13. },
    14. // 计算属性:
    15. // 场景:一个变量,需要用另外的变量计算而来
    16. /*
    17. 语法:
    18. computed:{
    19. 计算属性名(){
    20. return
    21. }
    22. }
    23. */
    24. // 注意:计算属性和data属性都是变量-不能重名
    25. computed:{
    26. num(){
    27. return this.a + this.b
    28. }
    29. }
    30. }
    31. </script>

     注意点:

    • 计算属性和data属性都是变量-不能重名
    • 计算属性是有缓存的,只要依赖项不变,都直接从缓存中取。依赖项改变函数自动执行并重新缓存

    (2)完整写法

    17、侦听器

    作用:可以侦听data/computed属性值的改变

    语法:

    watch: {

    "被侦听的属性名" (newVal, oldVal) {

        }

    }

    例:侦听输入框中输入的内容

    1. <template>
    2. <div>
    3. <input type="text" v-model = "name">
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. data(){
    9. return{
    10. name:""
    11. }
    12. },
    13. // 侦听到name值的改变
    14. /* 语法:
    15. watch:{
    16. name(newVal, oldVal){
    17. // 变量名对应值改变这里自动触发
    18. }
    19. }
    20. */
    21. watch:{
    22. name(newVal, oldVal){
    23. console.log(newVal, oldVal)
    24. }
    25. }
    26. }
    27. </script>

    18、侦听器深度执行和立即执行

    作用:侦听复杂类型,或者立即执行侦听函数

    语法:

    watch: {

    "要侦听的属性名":{

    immediate: true, // 立即执行

    deep: true, // 深度侦听复杂类型内变化

    handler(newVal, oldVal) {

                }

           }

    }

    1. <template>
    2. <div>
    3. <input type="text" v-model="user.name">
    4. <input type="text" v-model="user.age">
    5. </div>
    6. </template>
    7. <script>
    8. export default {
    9. data(){
    10. return{
    11. user:{
    12. name:"",
    13. age:""
    14. }
    15. }
    16. },
    17. watch:{
    18. user:{
    19. immediate: true, // 深度侦听(对象里的值改变)
    20. deep: true, // 立即正厅(网页打开时hanler就执行一次)
    21. handler(newVal, oldVal) {
    22. // user里的对象
    23. console.log(newVal, oldVal)
    24. }
    25. }
    26. }
    27. }
    28. </script>

     

  • 相关阅读:
    LVS+keepalived高可用负载均衡集群
    学习笔记-FRIDA脚本系列(二)
    多表查询和连接查询
    ChatGLM2-6B模型尝鲜
    预约陪诊系统开发,跨省就医也能省时省力
    Material Design组件 - 使用BottomSheet展现扩展内容(一)
    入门力扣自学笔记194 C++ (题目编号:754)
    微服务和 Kubernetes 的三大服务网格技术
    Excel中将文本格式的数值转换为数字
    机器学习笔记自最优化理论与方法(十一)无约束优化问题——关于共轭方向法重要特征的相关证明
  • 原文地址:https://blog.csdn.net/m0_70619994/article/details/127042056