首页 > 其他分享 >VUE复习

VUE复习

时间:2024-07-21 10:56:01浏览次数:16  
标签:count VUE const 复习 vue Vue 组件 import

VUE2

vue快速上手

vue概念

  • Vue是一套**构建用户界面 ** 的 渐进式 框架,主要用于构建用户界面和前端交互

举个例子

想象一下,你正在搭建一个房子,Vue 就像是一套工具箱,里面包含了各种工具,比如锤子、锯子、螺丝刀等。这些工具可以让你更快、更轻松地完成房子的建造。

创建vue实例

1)准备容器

2)引包 (官网) - 开发版本 / 生产版本

3)创建 Vue 实例 new Vue()

4)指定配置项 el data => 渲染数据

el 指定挂载点,选择器指定控制的是哪个盒子
data 提供数据

<body>
<!-- 
  创建Vue实例,初始化渲染
  1. 准备容器 (Vue所管理的范围)
  2. 引包 (开发版本包 / 生产版本包) 官网
  3. 创建实例
  4. 添加配置项 => 完成渲染
-->
<!-- 不是Vue管理的范围 -->
<div class="box2">
  box2 -- {{ count }}
</div>
<div class="box">
  box -- {{ msg }}
</div>
-----------------------------------------------------
<!-- Vue所管理的范围 -->
<div id="app">
  <!-- 这里将来会编写一些用于渲染的代码逻辑 -->
  <h1>{{ msg }}</h1>
  <a href="#">{{ count }}</a>
</div>

<!-- 引入的是开发版本包 - 包含完整的注释和警告 -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
  // 一旦引入 VueJS核心包,在全局环境,就有了 Vue 构造函数
  const app = new Vue({
    // 通过 el 配置选择器,指定 Vue 管理的是哪个盒子
    el: '#app',
    // 通过 data 提供数据
    data: {
      msg: 'Hello 传智播客',
      count: 666
    }
  })
</script>
</body>

插值表达式

  • 我们可以用插值表达式渲染出Vue提供的数据
  • 利用表达式进行插值,渲染到页面中
  • 语法格式:{{ 表达式 }}
<body>
<!-- 
  插值表达式:Vue的一种模板语法
  作用:利用 表达式 进行插值渲染
  语法:{{ 表达式 }}

  注意点:
    1. 使用的数据要存在
    2. 支持的是表达式,不是语句  if  for
    3. 不能在标签属性中使用 {{ }}
 -->
<div id="app">
  <p>{{ nickname }}</p>
  <p>{{ nickname.toUpperCase() }}</p>
  <p>{{ nickname + '你好' }}</p>
  <p>{{ age >= 18 ? '成年' : '未成年' }}</p>
  <p>{{ friend.name }}</p>
  <p>{{ friend.desc }}</p>
</div>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>

  const app = new Vue({
    el: '#app',
    data: {
      nickname: 'tony',
      age: 18,
      friend: {
        name: 'jepson',
        desc: '热爱学习 Vue'
      }
    }
  })
</script>
</body>

在这里插入图片描述

  • 错误用法:
 1.在插值表达式中使用的数据 必须在data中进行了提供
  <p>{{ hobby }}</p>//如果在data中不存在 则会报错
  2.支持的是表达式,而非语句,比如:if   for ...
  <p>{{ if }}</p>
  3.不能在标签属性中使用 {{  }} 插值 (插值表达式只能标签中间使用)
  <p title="{{ nickname }}">我是p标签</p> 

响应式特性

数据改变,视图会自动更新→使用Vue开发专注于业务核心逻辑

在这里插入图片描述

<body>
<div id="app">
  {{ msg }}
  {{ count }}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      // 响应式数据 → 数据变化了,视图自动更新
      msg: '你好,黑马',
      count: 100
    }
  })
  // data中的数据,是会被添加到实例上
  // 1. 访问数据  实例.属性名
  // 2. 修改数据  实例.属性名 = 新值
</script>
</body>

开发者工具

安装配置

在这里插入图片描述

vue指令

常用指令

指令(Directives)是 Vue 提供的带有 v- 前缀 的 特殊 标签属性

内容渲染指令

用来辅助开发者渲染 DOM 元素的文本内容

1)v-text(类似innerText)

语法:<p v-text="uname">hello</p>,将 uame 值渲染到 p 标签中

2)v-html(类似 innerHTML)

语法:<p v-html="intro">hello</p>,将 intro 值渲染到 p 标签中

 <div id="app">
    <h2>个人信息</h2>
	// 既然指令是vue提供的特殊的html属性,所以咱们写的时候就当成属性来用即可
    <p v-text="uname">姓名:</p> 
    <p v-html="intro">简介:</p>
  </div> 

<script>
        const app = new Vue({
            el:'#app',
            data:{
                uname:'张三',
                intro:'<h2>这是一个<strong>非常优秀</strong>的boy<h2>'
            }
        })
</script>
条件渲染指令

用来辅助开发者按需控制 DOM 的显示与隐藏

1)v-show

语法: v-show = “表达式” 表达式值为 true 显示, false 隐藏

原理:切换 display:none 控制显示隐藏

场景:频繁切换显示隐藏的场景

2)v-if

语法: v-if= “表达式” 表达式值 true显示, false 隐藏

原理:基于条件判断,是否创建 或 移除元素节点

场景:不频繁切换的场景

<body>
  <!-- 
    v-show底层原理:切换 css 的 display: none 来控制显示隐藏
    v-if  底层原理:根据 判断条件 控制元素的 创建 和 移除(条件渲染)
  -->
  <div id="app">
    <div v-show="flag" class="box">我是v-show控制的盒子</div>
    <div v-if="flag" class="box">我是v-if控制的盒子</div>
  </div>
  
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        flag: false
      }
    })
  </script>
</body>

3)v-else、v-else-if

<body>
  <div id="app">
    <p v-if="gender === 1">性别:♂ 男</p>
    <p v-else>性别:♀ 女</p>
    <hr>
    <p v-if="score >= 90">成绩评定A:奖励电脑一台</p>
    <p v-else-if="score >= 70">成绩评定B:奖励周末郊游</p>
    <p v-else-if="score >= 60">成绩评定C:奖励零食礼包</p>
    <p v-else>成绩评定D:惩罚一周不能玩手机</p>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        gender: 2,
        score: 95
      }
    })
  </script>
</body>
事件绑定指令

为DOM注册事件时使用

注册事件=添加监听+提供处理逻辑

语法:v-on:事件名 = “处理函数”

简写:@事件名

<body>
  <div id="app">
    <button @click="fn">切换显示隐藏</button>
    <h1 v-show="isShow">黑马程序员</h1>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app4 = new Vue({
      el: '#app',
      data: {
        isShow: true
      },
      methods: {
        fn () {
          // 让提供的所有methods中的函数,this都指向当前实例
          // console.log('执行了fn', app.isShow)
          // console.log(app3 === this)
          this.isShow = !this.isShow
        }
      }
    })
  </script>
</body>
属性绑定指令

动态设置html的标签属性 比如:src、url、title

语法:**v-bind:**属性名=“表达式”

简写: :属性名=“表达式”

<img v-bind:src="url" /> = <img :src="url" />v-bind可以省略

<body>
  <div id="app">
    <!-- v-bind:src   =>   :src -->
    <img v-bind:src="imgUrl" v-bind:title="msg" alt="">
    <img :src="imgUrl" :title="msg" alt="">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        imgUrl: './imgs/10-02.png',
        msg: 'hello'
      }
    })
  </script>
</body>
列表渲染指令

使用v-for列表渲染指令,辅助开发者基于一个数组来循环渲染一个列表结构

语法:

v-for = “(item, index) in arr” :key=“唯一值”

item→数组中的每一项, index →每一项的索引

key=“唯一值”,给列表项添加的唯一标识

<div id="app">
    <h3>小黑的书架</h3>
    <ul>
      <li v-for="(item,index) in booksList":key="item.id">
         <span>{{item.name}}</span>
        <span>{{item.author}}</span>
        <button @click="del(item.id)">删除</button>
      </li>
    </ul>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        booksList: [
          { id: 1, name: '《红楼梦》', author: '曹雪芹' },
          { id: 2, name: '《西游记》', author: '吴承恩' },
          { id: 3, name: '《水浒传》', author: '施耐庵' },
          { id: 4, name: '《三国演义》', author: '罗贯中' }
        ]
      },
      methods: {
        del(id) {
          // console.log('删除', id);
          // filter:根据条件,保留满足条件的对应项,得到一个新数组
          // 不会改变原数组,指挥将收集的放在一个新的数组
          // this.booksList.filter(item => item.id !== id)
          this.booksList = this.booksList.filter(item => item.id !== id)
        }
      }
    })
  </script>
双向绑定指令V-model

即数据改变视图自动更新;视图变化数据自动更新

作用:给表单元素(input、radio、select)使用,双向绑定数据

语法:v-model=“变量”

<body>
  <div id="app">
    <!-- 
      v-model 可以让数据和视图,形成双向数据绑定
      (1) 数据变化,视图自动更新
      (2) 视图变化,数据自动更新
      可以快速[获取]或[设置]表单元素的内容
     -->
    账户:<input type="text" v-model="username"> <br><br>
    密码:<input type="password" v-model="password"> <br><br>
    <button @click="login">登录</button>
    <button @click="reset">重置</button>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        username: '',
        password: ''
      },
      methods: {
        login () {
          console.log(this.username, this.password)
        },
        reset () {
          this.username = ''
          this.password = ''
        }
      }
    })
  </script>
</body>

补充指令

指令修饰符

通过“.”指明一些指令后缀 →不同的后缀封装了不同的处理操作 —> 简化代码

1)按键修饰符:@keyup.enter —>当点击enter键的时候才触发

<div id="app">
    <h3>@keyup.enter  →  监听键盘回车事件</h3>
    <input @keyup.enter="fn" v-model="username" type="text">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        username: ''
      },
      methods: {
        fn (e) {
          // if (e.key === 'Enter') {
          //   console.log('键盘回车的时候触发', this.username)
          // }

          console.log('键盘回车的时候触发', this.username)
        }
      }
    })
  </script>

2)v-model修饰符:

v-model.trim —>去除首位空格

v-model.number —>转数字

3)事件修饰符:

@事件名.stop —> 阻止冒泡

@事件名.prevent —>阻止默认行为

@事件名.stop.prevent —>可以连用 即阻止事件冒泡也阻止默认行为

<div id="app">
    <h3>v-model修饰符 .trim .number</h3>
    姓名:<input v-model.trim="username" type="text"><br>
    年纪:<input v-model.number="age" type="text"><br>
    
    <h3>@事件名.stop     →  阻止冒泡</h3>
    <div @click="fatherFn" class="father">
      <div @click.stop="sonFn" class="son">儿子</div>
    </div>

    <h3>@事件名.prevent  →  阻止默认行为</h3>
    <a @click.prevent href="http://www.baidu.com">阻止默认行为</a>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        username: '',
        age: '',
      },
      methods: {
        fatherFn () {
          alert('老父亲被点击了')
        },
        sonFn (e) {
          // e.stopPropagation()
          alert('儿子被点击了')
        }
      }
    })
  </script>
v-bind对样式增强的操作

1)操作class:针对 class 类名style 行内样式 进行控制

语法::class = “对象/数组”

对象:适用一个类名,来回切换

<div class="box" :class="{ 类名1: 布尔值, 类名2: 布尔值 }"></div>
<div class="box" :class='{red:true,big:true}'>dimple</div>

数组:适用批量添加或删除类

<div class="box" :class="[ 类名1, 类名2, 类名3 ]"></div>
 <div class="box" :class="['red','big']">dimple</div>
<div id="app">
    <div class="box" :class="{ red: true, big: true }">dimple</div>
    <div class="box" :class="['red', 'big']">dimple</div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {

      }
    })
  </script>

2)操作style:

语法::style = “样式对象”

适用场景:某个具体属性的动态设置

<div id="app">
    <div class="box" :style="{ width: '400px', height: '400px', backgroundColor: 'green' }"></div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {

      }
    })
  </script>
v-model应用于其他表单元素
输入框  input:text   ——> value
文本域  textarea	 ——> value
复选框  input:checkbox  ——> checked
单选框  input:radio   ——> checked
下拉菜单 select    ——> value
...
<div id="app">
    <h3>小黑学习网</h3>

    姓名:
      <input type="text" v-model="username"> 
      <br><br>

    是否单身:
      <input type="checkbox" v-model="isSingle"> 
      <br><br>

    <!-- 
      前置理解:
        1. name:  给单选框加上 name 属性 可以分组 → 同一组互相会互斥
        2. value: 给单选框加上 value 属性,用于提交给后台的数据
      结合 Vue 使用 → v-model
    -->
    性别: 
      <input v-model="gender" type="radio" name="gender" value="1">男
      <input v-model="gender" type="radio" name="gender" value="2">女
      <br><br>

    <!-- 
      前置理解:
        1. option 需要设置 value 值,提交给后台
        2. select 的 value 值,关联了选中的 option 的 value 值
      结合 Vue 使用 → v-model
    -->
    所在城市:
      <select v-model="cityId">
        <option value="101">北京</option>
        <option value="102">上海</option>
        <option value="103">成都</option>
        <option value="104">南京</option>
      </select>
      <br><br>

    自我描述:
      <textarea v-model="desc"></textarea> 

    <button>立即注册</button>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        username: '',
        isSingle: false,
        gender: "2",
        cityId: '102',
        desc: ""
      }
    })
  </script>

计算属性与侦听器

computed计算属性与methods计算属性

1)computed计算属性:封装了一段对于数据的处理,求得一个结果

2)methods计算属性:给Vue实例提供一个方法,调用以处理业务逻辑

<div id="app">
    <h3>小黑的礼物清单

标签:count,VUE,const,复习,vue,Vue,组件,import
From: https://blog.csdn.net/weixin_62831076/article/details/140576678

相关文章