欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue--常用指令总结

程序员文章站 2022-05-16 18:42:03
...

1. Vue语法--插值表达式

1.1 目标

学习插值表达式, 在DOM中插入内容

1.2 学习

又叫: 声明式渲染/文本插值/大胡子语法

语法: {{ 表达式 }}

例子:

<template>
  <div>
    <h1>{{ msg }}</h1>
    <h2>{{ obj.name }}</h2>
    <h3>{{ obj.age > 18 ? '成年' : '未成年' }}</h3>
  </div>
</template>

<script>
export default {
  data() { // 格式固定, 定义vue数据之处
    return {  // key相当于变量名
      msg: "hello, vue",
      obj: {
        name: "小vue",
        age: 5
      }
    }
  }
}
</script>

1.3 小结 

1. 什么是插值表达式?

答案:双大括号,可以把Vue变量直接显示在标签内

2. Vue中变量声明在哪里?

答案:data函数内, return的对象, 对象内的key就是变量名

2. Vue指令-v-bind-动态属性 

2.1 目标

学习v-bind, 给标签属性赋Vue变量

2.2 学习

vue指令, 实质上就是特殊的 html 标签属性, 特点: v- 开头

每个指令, 都有独立的作用

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

  • 简写::属性名="vue变量"

    <template>
      <div>
        <a v-bind:href="url">点击去京东</a>
        <img :src="imgUrl" alt="" />
      </div>
    </template>
    
    <script>
    // 目标:v-bind动态属性
    // 语法:v-bind:属性名="vue变量" ===>简写  :属性名="表达式"
    // 作用:标签的原生属性添加vue变量
    export default {
      data() {
        return {
          url: "http://www.jd.com",
          imgUrl:
            "https://img2.baidu.com/it/u=2108319215,1494231136&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=690",
        };
      },
    };
    </script>
    
    <style>
    </style>

2.3 小结 

 如何给dom标签的属性设置Vue变量?

答案::属性名="Vue变量"  

3.  Vue指令-v-on-事件绑定 

3.1 目标

学习v-on, 给绑定绑定事件

3.2 学习

  • 语法

    • v-on:事件名="methods中的函数"

    • v-on:事件名="methods中的函数(实参)"

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

<!-- vue指令:   v-on事件绑定-->
<p>你要买商品的数量: {{count}}</p>
<button v-on:click="addFn">增加1个</button>
<button v-on:click="addCountFn(5)">一次加5件</button>

<button @click="subFn">减少</button>

<script>
    export default {
        // ...其他省略
        methods: {
            addFn(){ // this代表export default后面的组件对象(下属有data里return出来的属性)
                this.count++
            },
            addCountFn(num){
                this.count += num
            },
            subFn(){
                this.count--
            }
        }
    }
</script>

3.3 小结 

1. 如何给dom标签绑定事件?

答案:@事件名="methods里的函数名"

2. 如何给事件传值?

答案:@事件名="methods里的函数名(实参)"  

4. 案例-点击说笑话 

4.1 目标

点击按钮, 随机切换显示一个笑话

4.2 案例需求

  1. 准备1个变量, 给初始值, 显示到页面上

  2. 在准备一组笑话

  3. 点击按钮, 随机提取一个笑话字符串, 赋予给word变量

4.3 正确代码

<template>
  <div>
    <p>{{ word }}</p>
    <button @click="jockBtnFn">点击说笑话</button>
  </div>
</template>

<script>
export default {
  data(){
    return {
      word: '这里是一条笑话',
      jockArr: ['我去相亲网站去了, 那你找到对象了吗? 不! 我找到了他们网站的一个Bug', '这个需求很简单, 怎么实现我不管, 明天上线', '程序员是推动这个世界进步的人']
    }
  },
  methods: {
    jockBtnFn(){
      let randNum = Math.floor(Math.random() * this.jockArr.length)
      let str = this.jockArr[randNum]
      this.word = str
    }
  }
}
</script>

4.4 小结 

点击说笑话的实现思路是什么?

答案:写需求要先写静态标签,再考虑动态效果

           绑定点击事件, 然后随机数从数组里取字符串

           把字符串赋予给变量word, 影响p标签显示内容

5.  Vue指令-v-on-事件对象 

5.1 目标

vue事件处理函数中, 拿到事件对象

5.2 学习

语法:

  • 无传参, 通过形参直接接收

  • 传参, 通过$event指代事件对象传给事件处理函数

    <template>
      <div>
        <a @click="one" href="http://www.baidu.com">阻止百度</a>
        <hr>
        <a @click="two(10, $event)" href="http://www.baidu.com">阻止去百度</a>
      </div>
    </template>
    
    <script>
    export default {
      methods: {
        one(e){
          e.preventDefault()
        },
        two(num, e){
          e.preventDefault()
        }
      }
    }
    </script>

5.3 小结 

Vue事件处理函数,如何拿到事件对象?

答案:无实参,直接用第一个形参接收

           有实参,手动传入$event

6.  Vue指令-v-on-修饰符

6.1 目标

事件修饰符 - 给事件带来更强大的功能

6.2 学习

语法:

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

    • .stop - 阻止事件冒泡

    • .prevent - 阻止默认行为

      <template>
        <div @click="fatherFn">
          <!-- vue对事件进行了修饰符设置, 在事件后面.修饰符名即可使用更多的功能 -->
          <button @click.stop="btn">.stop阻止事件冒泡</button>
          <a href="http://www.baidu.com" @click.prevent="btn">.prevent阻止默认行为</a>
        </div>
      </template>
      
      <script>
      export default {
        methods: {
          fatherFn(){
            console.log("father被触发");
          },
          btn(){
            console.log(1);
          }
        }
      }
      </script>

6.3 小结 

Vue有哪些主要修饰符,都有什么功能?

答案:.stop - 阻止事件冒泡

           .prevent - 阻止默认行为

7.  Vue指令-v-on-按键修饰符

7.1 目标

给键盘事件, 绑定修饰符

7.2 学习

  • 语法:

    • @keyup.enter - 监测回车按键

    • @keyup.esc - 监测返回按键

更多修饰符

<template>
  <div>
    <input type="text" @keyup.enter="entFn" />
    <br />
    <input type="text" @keyup.esc="escFn" />
  </div>
</template>

<script>
// 目标:键盘事件 - 修饰符
// 语法:
//    @事件名.修饰符="methods里方法名"
//  .enter - 只有触发enter键才会执行函数体
//  .esc - 只有触发esc键才会执行函数体
export default {
  methods: {
    entFn() {
      console.log("用户按了enter键");
    },
    escFn() {
      console.log("用户按了esc键");
    },
  },
};
</script>

7.3 小结 

1. 按键修饰符如何使用?

答案:@键盘事件.按键修饰符="methods里的函数名"

2. 有哪些主要按键修饰符?

答案:.enter - 只有按下回车才能触发这个键盘事件函数

           .esc - 只有按下取消键才能触发这个键盘事件函数  

8. 案例--翻转世界 

8.1 目标

点击按钮 - 把文字取反显示 - 再点击取反显示(回来了)

提示: 把字符串取反赋予回去

效果演示:

Vue--常用指令总结 

 

8.2 正确代码

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="btn">逆转世界</button>
  </div>
</template>

<script>
// 目标: 点击翻转
// 1.准备标签和变量初始值
// 2.绑定点击事件
export default {
  data() {
    return {
      message: "HELLO, WORLD",
    };
  },
  methods: {
    btn(){
      // 3.转数组
      // let arr = this.msg.split("");
      // 4.翻转数组
      // arr.reverse();
      // 5.数组转字符串
      // this.msg = arr.join("");
      // 简写
      this.message = this.message.split("").reverse().join("")
    }
  }
};
</script>

8.3 小结 

点击翻转字符串显示思路是什么?

答案:写需求要先写静态标签,再考虑动态效果,找到第一步干什么

           记住方法的特点 - 可以自己总结字典和口诀

9. Vue指令-v-model-双向绑定1

9.1 目标 

学习v-model, 把表单值和Vue变量双向绑定

9.2 学习

  • 语法: v-model="vue数据变量"

  • 双向数据绑定

    • 数据变化 -> 视图自动同步

    • 视图变化 -> 数据自动同步

  • 最后演示: 用户名绑定 - Vue内部是MVVM设计模式

<template>
  <div>
    <div>
      <span>用户名:</span>
      <input type="text" v-model="userName" />
    </div>
    <div>
      <span>密码:</span>
      <input type="password" v-model="userPass" />
    </div>
    <div>
      <span>来自:</span>
      <!-- select身上写v-model option身上写value -->
      <select v-model="from">
        <option value="北京">北京市</option>
        <option value="上海">上海市</option>
        <option value="广州">广州市</option>
      </select>
    </div>
    <div>
      <span>爱好:</span>
      <!--  v-model遇到复选框
          vue变量  非数组类型  关联复选框 checked属性 (true/false)
          vue变量   数组类型   关联复选框value属性
        -->
      <input type="checkbox" v-model="hobby" value="抽烟" />抽烟
      <input type="checkbox" v-model="hobby" value="喝酒" />喝酒
      <input type="checkbox" v-model="hobby" value="烫头" />烫头
    </div>
    <div>
      <span>性别:</span>
      <input type="radio" v-model="gender" name="sex" value="男生" />男
      <input type="radio" v-model="gender" name="sex" value="女生" />女
    </div>
    <div>
      <span>自我介绍:</span>
      <textarea v-model="intro"></textarea>
    </div>
  </div>
</template>

<script>
// 目标:v-model指令
// 作用:把value属性和vue变量(双向)绑定到一起
// 语法:v-model="vue变量"
// 双向:
//   表单标签value值改变 --> vue变量改变
//   vue变量改变 --> 表单标签value值改变
export default {
  data() {
    return {
      userName: "张三",
      userPass: "",
      from: "上海",
      hobby: [],
      gender: "男生",
      intro: "",
    };
  },
};
</script>

9.3 小结

1. v-model用在哪里?

答案:暂时只能用在表单标签上

2. v-model有什么作用?

答案:把Vue的"数据变量"和表单的"value属性"双向绑定在一起  

10. Vue指令-v-model-修饰符 

10.1 目标

给v-model扩展额外功能

10.2 学习

  • 语法:

  • v-model.修饰符="vue数据变量"

    • .number 以parseFloat转成数字类型

    • .trim 去除首尾空白字符

    • .lazy 在change时触发而非inupt时

      <template>
        <div>
          <div>
            <span>年龄:</span>
            <input type="text" v-model.number="age">
          </div>
          <div>
            <span>人生格言:</span>
            <input type="text" v-model.trim="motto">
          </div>
          <div>
            <span>自我介绍:</span>
            <textarea v-model.lazy="intro"></textarea>
          </div>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            age: "",
            motto: "",
            intro: ""
          }
        }
      }
      </script>

10.3 小结 

1. Vue针对v-model有哪些修饰符来提高我们编程效率?

答案:.number - 转成数值类型后再赋予给Vue数据变量

           .trim - 去除两边空格后把值赋予给Vue数据变量

           .lazy - 等表单失去焦点,才把值赋予给Vue数据变量

11.  Vue指令-v-html 

11.1 目标

学习v-html, 设置内容

11.2 学习

  • 语法:

    • v-html="vue数据变量"

<template>
  <div>
    <p v-html="str"></p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      str: "<span>我是一个span标签</span>"
    }
  }
}
</script>

总结: v-html把值当做html解析  

注意:v-html会覆盖插值表达式 

11.3 小结

1. v-html有什么作用?

答案:可以设置标签显示的内容

2. 和插值表达式区别是什么?

答案:插值表达式把值当成普通字符串显示

           v-html把值当成标签进行解析显示  

12.  Vue指令-v-show和v-if

12.1 目标

控制标签显示或隐藏

12.2 学习

  • 语法:

    • v-show="vue变量"

    • v-if="vue变量"

  • 原理

    • v-show 用的display:none隐藏 (频繁切换使用)

    • v-if 直接从DOM树上移除

  • 高级

    • v-else使用

      <template>
        <div>
          <h1 v-show="isOk">v-show的盒子</h1>
          <h1 v-if="isOk">v-if的盒子</h1>
      
          <div>
            <p v-if="age > 18">我成年了</p>
            <p v-else>还得多吃饭</p>
          </div>
        </div>
      </template>
      
      <script>
      export default {
        data() {
          return {
            isOk: true,
            age: 15
          }
        }
      }
      </script>

总结: 使用v-show和v-if以及v-else指令, 方便通过变量控制一套标签出现/隐藏

12.3 小结 

 1. Vue如何控制标签显示/隐藏?

答案:v-show或v-if,给变量赋予true/false,显示/隐藏

 2. 区别是什么?

答案: v-show是用css方式显示/隐藏标签

            v-if直接从DOM树上添加/移除

            v-if可以配合v-else使用

 

13. Vue指令-v-for

13.1 目标

学习v-for, 用数据循环生成标签

13.2 学习

  • 语法

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

    • v-for="值变量 in 目标结构"

  • 目标结构:

    • 可以遍历数组 / 对象 / 数字 / 字符串

  • 注意:

    v-for的临时变量名不能用到v-for范围外

    同级标签的key值不能重复

1. 遍历数组

<template>
  <div id="app">
      <!-- v-for 把一组数据, 渲染成一组DOM -->
      <!-- 口诀: 让谁循环生成, v-for就写谁身上 -->
      <p>学生姓名</p>
      <ul>
        <li v-for="(item, index) in arr" :key="item">
          {{ index }} - {{ item }}
        </li>
      </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      arr: ["小明", "小欢欢", "大黄"]
  }
}
</script>

2. 遍历数组内对象

<template>
  <div id="app">
      <!-- 省略其他 -->
      <p>学生详细信息</p>
      <ul>
        <li v-for="obj in stuArr" :key="obj.id">
          <span>{{ obj.name }}</span>
          <span>{{ obj.sex }}</span>
          <span>{{ obj.hobby }}</span>
        </li>
      </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // ...省略其他
      stuArr: [
        {
          id: 1001,
          name: "孙悟空",
          sex: "男",
          hobby: "吃桃子",
        },
        {
          id: 1002,
          name: "猪八戒",
          sex: "男",
          hobby: "背媳妇",
        }
      ]
    }
  }
}
</script>

 

13.3 小结

 1. v-for如何循环列表?

答案:先准备目标数据结构

           可以遍历数组/对象/固定数字/字符串

           谁想循环就把v-for写谁身上

2. v-for注意事项?

答案:值变量和索引变量不能用到v-for范围以外

           v-for="(值变量, 索引变量) in Vue变量" - 一定要注意in两边必须有空格