• vue脚手架及常用指令集合


    vue的特点

    • 渐进式
    • 数据驱动视图 (响应式)
    • 组件系统

    vue-cli 脚手架介绍

    @vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目

    快速搭建项目结构,安装命令:

    yarn global add @vue/cli
    # OR
    npm install -g @vue/cli 
    
    • 1
    • 2
    • 3

    用脚手架创建项目需要四个步骤:

    1. 创建项目

      # vue和create是命令, vuecli-demo是文件夹名
      vue create vuecli-demo 
      
      • 1
      • 2
    2. 选择模板

      通过键盘的上下箭头选择合适的模板,如果选择错了,可以按下ctrl+c终止操作。

      选择你需要的模板 vue2/vue3 image.png

    3. 安装依赖

      如果安装了yarn,第一次会让你选择以哪种方式下载第三方包(use yarn或use npm),可根据个人习惯选择 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x98ybehk-1656308454205)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1941827cdfa9447e8e2ae248510397a4~tplv-k3u1fbpfcp-zoom-in-crop-mark:1956:0:0:0.image?)]

    4. 启动项目

      记得 cd vuecil-demo到根文件夹

      启动项目

      yarn serve
      # OR
      npm run serve 
      
      • 1
      • 2
      • 3

      之所以用这个命令可以进行项目启动是脚手架帮我们在package.json中添加了自定义命令:

      image.png

      可以自行修改,同样的项目打包命令:

      yarn build
      # OR
      npm run build 
      
      • 1
      • 2
      • 3

      我们会得到一个项目的架子:

       vuecil-demo        # 项目目录
          ├── node_modules # 项目依赖的第三方包
          └── public       # 静态文件目录
            ├── favicon.ico# 浏览器小图标
            └── index.html # 单页面的html文件(网页浏览的是它)
          ├── src          # 业务文件夹=》写代码
            ├── assets     # 静态资源
                └── logo.png # vue的logo图片
            ├── components # 组件目录
                └── HelloWorld.vue # 欢迎页面vue代码文件 
            ├── App.vue    # 整个应用的根组件
            └── main.js    # 入口js文件
          ├── package.json # 描述项目及项目
          ├── .gitignore   # git提交忽略配置
          ├── babel.config.js  # babel配置 
          ├── README.md    # 项目说明
            └── package-lock.json # 项目包版本锁定和下载地址 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

    vue-cli 覆盖webpack配置

    1. vue-cli使用vue 命令快速创建项目,它创建的每个项目都有相同的结构;
    2. 它的运行机制是基于webpack的,在项目创建是内部已经帮我们配置好了

    要想覆盖webpack的配置,需要在vue.config.js中配置,如默认我们启动项目服务时,不会自动打开浏览器,我们可以自行配置:

    const { defineConfig } = require('@vue/cli-service')
    module.exports = defineConfig({
      transpileDependencies: true,
      devServer:{
        host: 'localhost',
        open: true,
        port: 3000
      }
    })
    ​ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    另外,初学者可以设置关闭eslint,熟练之后再打开

     lintOnSave: false 
    
    • 1

    MVVM设计模式

    转变思维, 用数据驱动视图改变, 操作dom的事, vue源码内干了

    设计模式: 是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。

    MVVM,一种软件架构模式,决定了写代码的思想和层次

    • M: model数据模型 (data里定义)
    • V: view视图 (html页面)
    • VM: ViewModel视图模型 (vue.js源码)

    MVVM通过数据双向绑定让数据自动地双向同步 不再需要操作DOM

    • V(修改视图) -> M(数据自动同步)
    • M(修改数据) -> V(视图自动同步)

    image.png 可以在devtool工具(Chrome的插件)改变M层的变量, 观察V层(视图的自动同步),可在以下插件地址自行下载:chrome.zzzmh.cn/#/index

    1. 在vue中,不推荐直接手动操作DOM!!!

    2. 在vue中,通过数据驱动视图,不要在想着怎么操作DOM,而是想着如何操作数据!! (思想转变)

    vue的基本指令

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

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

    1.插值表达式

    功能: 数据渲染。 将数据(变量,或者利用ajax从后端获取到的数据)展示到页面上。这里它不会直接操作dom,而是有自己的语法。

    <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>
    ​
    <style>
    </style>
    ​ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    {{ }} 可以

    • 写data数据字段名称

    • 对data数据字段进行表达式运算

      • 拼接
      • 算术运算
      • 三元运算

    2.vue指令v-bind

    功能: 给标签属性设置vue变量的值

    • 语法:v-bind:属性名="vue变量"
    • 简写::属性名="vue变量"
    <!-- vue指令-v-bind属性动态赋值 -->
    <a v-bind:href="url">我是a标签</a>
    <img :src="imgSrc"> 
    
    • 1
    • 2
    • 3

    总结: 把vue变量的值, 赋予给dom属性上, 影响标签显示效果

    3.vue指令-v-for

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

    语法:标签 v-for=“(值, 索引或者属性名) in 目标结构” :key=“唯一值”></标签>

    • 索引可以省略

    • 目标结构可以是:数组 / 对象 / 数字

    • 注意:

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

      <template>
        <div>
          <ul>
            <li v-for="(item, index) in arr" :key="item.id">
              {{ index + 1 }}---{{ item.name }}// item代表数组中的每一项,index代表当前下标
            </li>
          </ul>
          <hr />
          <ul>
            <li v-for="(value, key) in obj" :key="key">{{ value }}---{{ key }}</li>
            // value代表对象中的值,key表示属性名
          </ul>
          <hr />
          <ul>
            <li v-for="index in 100" :key="index">
              我爱你 // index代表1~100中的数字
            </li>
          </ul>
        </div>
      </template>
      ​
      <script>
      export default {
        data() {
          return {
            obj: { a: 100, b: 200 },
            arr: [
              { id: 1, name: "张三" },
              { id: 2, name: "王五" },
              { id: 3, name: "李四" },
            ],
          };
        },
      };
      </script>
      ​
      <style>
      </style> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38

    4.vue指令v-text和v-html

    功能 : 更新DOM对象的innerText/innerHTML

    • 语法:

      • v-text=“vue数据变量”
      • v-html=“vue数据变量”
    • 注意: 会覆盖插值表达式

    <template>
      <div>
        <p v-text="str"></p>
        <p v-html="str"></p>
      </div>
    </template>
    ​
    <script>
      export default {
        data() {
          return {
            str: "<span>我是一个span标签</span>"
          }
        }
      }
    </script> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    v-text把值当成普通字符串显示, v-text ===> innerText

    v-html把值当做html解析,v-html ===> innerHTML

    5.vue指令v-show和v-if

    功能 : 控制标签的隐藏或出现

    • 语法:

      • v-show=“vue变量”
      • v-if=“vue变量”

      如果vue变量的值为true,就可见,否则就不可见。

    • 原理

      • v-show 用的display:none隐藏 (频繁切换使用)
      • v-if 直接从DOM树上添加或移除
      <template>
        <div>
          <h1 v-show="isOk">v-show的盒子</h1>
          <h1 v-if="isOk">v-if的盒子</h1>
      ​
          <div>
            <p v-show="age > 18">我成年了</p>
            <p v-if="age > 18">我成年了</p>
          </div>
        </div>
      </template>
      ​
      <script>
      export default {
        data() {
          return {
            isOk: true,
            age: 15,
          }
        }
      }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
    • v-show 性能较好,对应需要频繁切换显示与隐藏的功能,可以使用v-show。

      • 注意无论变量是否为true还是false,它一定会创建元素的。
    • v-if 会动态创建和删除元素。

      • 在频繁的切换可见与不可见时,它的效率会低一点
      • 如果变量的值为false,它将不会创建元素

    特殊的适用v-if的场景:如果是登陆用户就显示头像

    注意避免v-for和v-if在一起使用

    Vue 处理指令时,v-for 比 v-if 具有更高的优先级, 虽然用起来也没报错好使, 但是性能不高, 如果你有5个元素被v-for循环, v-if也会分别执行5次.

    6.vue指令v-if,v-else-if,else

    功能 : 模板中的选择结构

    与js中的if选择结构是一致的。

    <标签 v-if="条件">        </标签> 
    <标签 v-else-if="条件">   </标签> 
    <标签 v-else-if="条件">   </标签> 
    <标签 v-else>             </标签> 
    
    • 1
    • 2
    • 3
    • 4

    示例:

    <template>
      <div>
        <p v-if="flag > 80">优秀</p>
        <p v-else-if="flag >= 60">一般</p>
        <p v-else>不及格</p>
      </div>
    </template>
    ​
    <script>
    export default {
      data() {
        return {
          flag: 70,
        };
      },
    };
    </script>
    ​
    <style>
    </style> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    7.vue指令v-on

    功能 : 给标签绑定事件

    • 语法

      • v-on:事件名=“要执行的少量代码”
      • v-on:事件名=“methods中的函数”
      • v-on:事件名=“methods中的函数(实参)”
    • 简写: @事件名=“methods中的函数”

    <template>
      <div>
        <p>你要买商品的数量: {{count}}</p>
        <button v-on:click="count = count + 1">增加1</button>
        <button v-on:click="addFn">增加1个</button>
        <button v-on:click="addCountFn(5)">一次加5件</button>
        <button @click="subFn">减少</button>
      </div>
    </template>
    <script>
        export default {
            data() {
                return {
                    count: 1,
                    };
                },
            methods: {
                addFn(){ // this代表export default后面的组件对象(下属有data里return出来的属性)
                    this.count++
                },
                addCountFn(num){
                    this.count += num
                },
                subFn(){
                    this.count--
                }
            }
        }
    </script> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    vue指令v-on事件对象

    目标: vue事件处理函数中, 拿到事件对象(这里的事件对象与原生js操作dom获取来的完全一样)

    • 语法:

      • 无传参, 通过形参直接接收
      • 传参, 通过$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> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    vue指令v-on事件修饰符

    功能 : 在事件后面.修饰符名 - 给事件带来更强大的功能

    语法:

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

      • .stop - 阻止事件冒泡
      • .prevent - 阻止默认行为
      • .once - 程序运行期间, 只触发一次事件处理函数
    <template>
      <div @click="fatherFn">
        <!-- vue对事件进行了修饰符设置, 在事件后面.修饰符名即可使用更多的功能 -->
        <button @click.stop="btn">.stop阻止事件冒泡</button>
        <a href="http://www.baidu.com" @click.prevent="btn">.prevent阻止默认行为</a>
        <button @click.once="btn">.once程序运行期间, 只触发一次事件处理函数</button>
      </div>
    </template>
    ​
    <script>
    export default {
      methods: {
        fatherFn(){
          console.log("father被触发");
        },
        btn(){
          console.log(1);
        }
      }
    }
    </script> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    vue指令-v-on按键修饰符

    目标: 给键盘事件, 添加修饰符, 增强能力

    • 语法:

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

    更多修饰符

    <template>
      <div>
        <input type="text" @keydown.enter="enterFn">
        <hr>
        <input type="text" @keydown.esc="escFn">
      </div>
    </template>
    ​
    <script>
    export default {
     methods: {
       enterFn(){
         console.log("enter回车按键了");
       },
       escFn(){
         console.log("esc按键了");
       }
     }
    }
    </script> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    8.vue指令-v-model双向绑定

    功能 : 把value属性和vue数据变量, 双向绑定到一起

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

    • 双向数据绑定

      • 数据变化 -> 视图自动同步
      • 视图变化 -> 数据自动同步
    <template>
      <div>
        <!-- 
            v-model:是实现vuejs变量和表单标签value属性, 双向绑定的指令
        -->
        <div>
          <span>用户名:</span>
          <input type="text" v-model="username" />
        </div>
        <div>
          <span>密码:</span>
          <input type="password" v-model="pass" />
        </div>
        <div>
          <span>来自于: </span>
          <!-- 下拉菜单要绑定在select上 -->
          <select v-model="from">
            <option value="北京市">北京</option>
            <option value="南京市">南京</option>
            <option value="天津市">天津</option>
          </select>
        </div>
        <div>
          <!-- (重要)
          遇到复选框, v-model的变量值
          非数组 - 关联的是复选框的checked属性
          数组   - 关联的是复选框的value属性
           -->
          <span>爱好: </span>
          <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" value="男" name="sex" v-model="gender">男
          <input type="radio" value="女" name="sex" v-model="gender">女
        </div>
        <div>
          <span>自我介绍</span>
          <textarea v-model="intro"></textarea>
        </div>
      </div>
    </template>
    ​
    <script>
    export default {
      data() {
        return {
          username: "",
          pass: "",
          from: "",
          hobby: [], 
          sex: "",
          intro: "",
        };
      }
    };
    </script> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    总结:

    v-model适用于表单开发,自动获取用户输入或选择数据 特别注意: v-model, 在input[checkbox]的多选框状态时 变量为非数组, 则绑定的是checked的属性(true/false) - 常用于: 单个绑定使用 变量为数组, 则绑定的是他们的value属性里的值 - 常用于: 收集勾选了哪些值

    vue指令-v-model修饰符

    功能 : 让v-model拥有更强大的功能

    语法:

    • 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> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    9.vue基础动态class

    功能 : 用v-bind给标签class设置动态的值

    语法:

    • 格式1:<标签 :class=“变量” />

    • 格式2:<标签 :class=“{类名1: 布尔值, 类名2: 布尔值}” />

      • 如果布尔值为true,就添加对应的类名
    <template>
      <div>
        <input type="text" v-model="num" />
        <!-- 输入的值大于50就变红 -->
        <p :class="{ red: num > 50 }">
          {{ num }}
        </p>
    ​
        <p :class="color">哈哈哈哈哈</p>
      </div>
    </template>
    ​
    <script>
    export default {
      data() {
        return {
          num: "",
          color: "red",// 变量接收定义好的类名
        };
      },
    };
    </script>
    ​
    <style>
    .red {
      color: red;
    }
    </style> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    说明:可以和静态class共存

    10.vue基础动态style

    功能 : 给标签动态设置style的值

    语法:

    • :style=“{css属性名: 值}”
    • :style=“变量名”
    <template>
      <div>
        <p :style="{ backgroundColor: colorStr }">动态style</p>
        <p :style="objStyle">动态style,对象</p>
      </div>
    </template>
    ​
    <script>
    export default {
      data() {
        return {
          colorStr: "red",
          objStyle: {
            fontSize: "30px",
            // css样式中的 带 - 的属性必须用驼峰命名或者 属性名加引号 "font-size"
            color: "blue",
          },
        };
      },
    };
    </script>
    ​
    <style>
    </style> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    说明: 可以和静态style共存

    更多指令官网可查:cn.vuejs.org/

  • 相关阅读:
    设备指纹技术详解丨设备指纹知多少,看这场直播就够了!
    linux查看所有用户
    Datax抽取mysql的bit类型数据
    全面解析UDP协议(特点、报文格式、UDP和TCP的区别)
    架构师之路,从「存储选型」起步
    夜神模拟器进行APP抓包
    sqlserver问题
    关键词搜索1688工厂数据API接口代码对接教程
    剑指Offer51数组中的逆序对(相关话题:线段树)
    1688接口大全及其解析
  • 原文地址:https://blog.csdn.net/web22050702/article/details/125482332