Vue-创建实例/vue常见指令

Vue-01

一.Vue快速上手

(1)Vue概念

Vue 是什么?

概念:Vue 是一个用于 构建用户界面 (基于数据渲染出用户看到的页面) 的 渐进式 (循序渐进的学习) 框架 (一套完整的项目解决方案,提升开发效率)

Vue 的两种使用方式:
① Vue 核心包开发 场景:局部 模块改造
② Vue 核心包 & Vue 插件 工程化开发 场景:整站 开发

(2)创建实例

核心步骤 4步:
1.准备容器

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

3.创建 Vue 实例 new Vue()

4.指定配置项→ 渲染数据
① el 指定挂载点
② data 提供数据

 <body>
  <!-- 1.准备容器 (Vue所管理的范围) -->
  <div id="app">  {{msg}}  </div>
  <!-- 2. 引包 (开发版本包 / 生产版本包) 官网 -->
  <!-- 开发版本:包含完整的警告和调试模式,学习阶段统一使用开发版本 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    // 一旦引入了vue的包,全局就会有一个Vue构造函数
    // 3. 创建实例
    // 4. 添加配置项 => 完成渲染
    const app = new Vue({
      el: '#app',
      data: {
        msg: '你好哇世界!'
      }
    })
  </script>

(3)差值表达式 {{ }}

插值表达式是一种 Vue 的模板语法

语法:{{ 表达式 }}

注意点:
(1)使用的数据必须存在 (data)
(2)支持的是表达式,而非语句,比如:if for …
(3)不能在标签属性中使用 {{ }} 插值

(4)响应式特征

响应式:数据变化,视图自动更新 (聚焦于数据 → 数据驱动视图)

① 访问数据: “实例.属性名”
② 修改数据: “实例.属性名” = “值”

(5)安装 Vue 开发者工具:装插件调试 Vue 应用

(1)通过谷歌应用商店安装 (国外网站)
(2)极简插件: 下载 → 开发者模式 → 拖拽安装 → 插件详情允许访问文件

二.Vue指令

Vue 会根据不同的【指令】,针对标签实现不同的【功能】
指令:带有 v- 前缀 的 特殊 标签属性

(1)v-html:

作用:设置元素的 innerHTML
语法:v-html = "表达式 "

<body>
  <div id="app">
    <div>{{msg}}</div>
      
    <!-- v-html:设置元素的innerHTML -->
    <!-- v-html='表达式' -->
      
    <div v-html='msg'></div>
    <!-- 注意:如果使用了v-html则标签内不能再写内容了,会被v-html的结果覆盖掉 -->
    <div v-html='msg'>1234</div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标:
     *   将带有标签的 msg 数据解析标签并渲染到 div 中
     */
    const app = new Vue({
      el: '#app',
      data: {
        msg: '<h1>设置元素的innerHTML</h1>'
      }
    })
  </script>

(2)v-show / v-if

v-show
1.作用: 控制元素显示隐藏

2.语法: v-show = “表达式” 表达式值 true 显示, false 隐藏
3.原理: 切换 display:none 控制显示隐藏

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

v-if

  1. 作用: 控制元素显示隐藏(条件渲染)

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

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

  4. 场景: 要么显示,要么隐藏,不频繁切换的场景

<body>
  <div id="app">
    <div class="box" v-show='isShow'>我是v-show控制的盒子</div>
    <div class="box" v-if='isShow'>我是v-if控制的盒子</div>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标: 控制盒子显示隐藏
     *    v-show 底层原理:通过设置display:none来改变盒子的显示状态
     *    v-if   底层原理:通过创建/删除DOM元素来实现盒子的显示隐藏
     * */
    const app = new Vue({
      el: '#app',
      data: {
        isShow:true
      }
    })
  </script>

</body>

(3)v-else v-else-if

  1. 作用: 辅助 v-if 进行判断渲染
  2. 语法: v-else v-else-if = “表达式”

3.注意: 需要紧挨着 v-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.7.14/dist/vue.js"></script>
  <script>
    // 目标:
    // 1. 根据条件渲染姓名
    // 2. 根据成绩来渲染奖励
    const app = new Vue({
      el: '#app',
      data: {
        gender: 1,
        score: 95
      }
    })
  </script>

</body>

(4)v-on

  1. 作用: 注册事件= 添加监听 + 提供处理逻辑
    2. 语法:
    ① v-on:事件名 = “内联语句”
    ② v-on:事件名 = “methods中的函数名” / v-on:事件名=“处理函数(实参)”

  2. 简写:@事件名

v-on:事件名 = “内联语句”

<body>
  <div id="app">
    <button @click='count--'>-</button>
    <span>{{ count }}</span>
    <button @click='count++'>+</button>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    // 目标: 点击 - 让数字减一, 点击 + 让数字加一
    const app = new Vue({
      el: '#app',
      data: {
        count: 100
      }
    })
  </script>
</body>

v-on:事件名 = “methods中的函数名”

<body>
  <div id="app">
    <button @click='fn'>切换显示隐藏</button>
    <h1 v-if='isShow'>程序猿</h1>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标:
     *    点击切换 h1 标签显示隐藏
     */
    const app = new Vue({
      el: '#app',
      data: {
        isShow: true
      },
      // methods中存放函数
      // 注意:主要是定义在methods中的函数,最终都会放到实例对象上,所以内部的this助兴实力对象
      methods: {
        fn() {
          this.isShow = !this.isShow
        }
      }
    })
  </script>
</body>

v-on:事件名=“处理函数(实参)”

<body>
  <div id="app">
    <div class="box">
      <h3>自动售货机</h3>
      <button @click='buy(5)'>可乐5</button>
      <button @click='buy(10)'>咖啡10</button>
    </div>
    <p>银行卡余额:{{ money }}</p>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标:
     *  点击不同按钮, 银行卡余额减少对应的金额
     */
    const app = new Vue({
      el: '#app',
      data: {
        money: 100
      },
      methods:{
        buy(price){
          this.money -= price
        }
      }
    })
  </script>
</body>

(5)v-bind

  1. 作用: 动态的设置html的标签属性 src url title …
  2. 语法: v-bind:属性名=“表达式”
  3. 注意: 简写形式 :属性名=“表达式”
<body>
  <div id="app">
    <!-- <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.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标:
     *  使用 v-bind 指令动态绑定标签属性
     */
    const app = new Vue({
      el: '#app',
      data: {
        imgUrl: './imgs/10-02.png',
        msg: 'hello '
      }
    })
  </script>
</body>

(6)v-for

  1. 作用: 基于数据(数组、对象、数字… )循环, 多次渲染整个元素

  2. 遍历数组语法:
    v-for = “(item, index) in 数组”

    item 每一项, index 下标

    3.省略 index: v-for = “item in 数组”

<body>

  <div id="app">
    <h3>水果店</h3>
    <ul>
      <li v-for='(item,index) in list'>{{item}}---{{index}}</li>
    </ul>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标: 使用 v-for 循环渲染 li
     */
    const app = new Vue({
      el: '#app',
      data: {
        list: ['西瓜', '苹果', '鸭梨', '榴莲']
      }
    })
  </script>
</body>

(7)v-for 中的 key

语法:key属性 = “唯一标识”

作用:给列表项添加的唯一标识。便于Vue进行列表项的正确排序复用。

v-for 的默认行为会尝试 原地修改元素 (就地复用)

注意:

    1. key 的值只能是 字符串 或 数字类型
    2. key 的值必须具有 唯一性
    3. 推荐使用 id 作为 key(唯一),不推荐使用 index 作为 key(会变化,不对应)
<body>

  <div id="app">
    <h3>小小图书馆</h3>
    <ul>
      <!-- 复用:Vue不会轻易删除DOM并重新并重新创建DOM,因为这样很消耗性能,它会想尽一切办法少的去销毁DOM -->
      <!-- v-for 的默认复用策略:就地更新,当前删除第一个元素后,还剩3个li,那么Vue就会把最后一个li删除,里面的内容平移,以复用所有现存的li -->
      <!-- v-for 时建议加上key属性,一般用唯一标识:id -->
      <!-- key的设置要求:
      1.一定要在当前v-for中唯一
      2.必须是string或number -->
      <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.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标: 理解 v-for 中 :key 的作用
     */
    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) {
          this.booksList = this.booksList.filter(item => item.id !== id)
        }
      }
    })
  </script>
</body>

(8)v-model

  1. 作用: 给 表单元素 使用, 双向数据绑定(可以快速 获取 或 设置 表单元素内容)
    ① 数据变化 → 视图自动更新
    ② 视图变化 → 数据自动更新

  2. 语法: 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.7.14/dist/vue.js"></script>
  <script>
    /**
     * 目标: 理解 v-model 的使用
     *  1. 使用 v-model 双向绑定用户名和密码
     *  2. 点击登录时直接获取用户名密码数据
     *  3. 点击重置时直接重置用户名和密码
     */
    const app = new Vue({
      el: '#app',
      data: {
        username:'',
        password:''
      },
      methods: {
        login(){
          console.log(this.username,this.password);
        },
        reset(){
          this.username = ''
          this.password = ''
        }
      }
    })
  </script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值