前端Vue入门-day02

news2024/9/27 23:33:18

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

指令补充

指令修饰符

v-bind 对于样式控制的增强 

操作class

案例:京东秒杀 tab 导航高亮

操作style 

v-model 应用于其他表单元素 

computed 计算属性

基础语法

computed 计算属性 vs methods 方法

计算属性完整写法

综合案例 - 成绩案例

watch 侦听器

基础语法

完整写法 


指令补充

指令修饰符

通过 "." 指明一些指令 后缀 ,不同 后缀 封装了不同的处理操作 简化代码
① 按键修饰符
@keyup.enter
键盘回车监听
v-model 修饰符
v-model.trim 去除首尾空格
v-model.number 转数字
③ 事件修饰符
@ 事件名 .stop → 阻止冒泡
@ 事件名 .prevent → 阻止默认行为

v-bind 对于样式控制的增强 

为了方便开发者进行 样式控制 , Vue 扩展了 v-bind 的语法,可以针对 class 类名 style 行内样式 进行控制

操作class

语法 :class = "对象/数组"
对象 → 键就是类名,值是布尔值。如果值为 true ,有这个类,否则没有这个类
        适用场景:一个类名,来回切换

数组 → 数组中所有的类,都会添加到盒子上,本质就是一个 class 列表  

 

         适用场景:批量添加或删除类  

案例:京东秒杀 tab 导航高亮

核心思路:
1. 基于数据动态渲染 tab → v-for
2. 准备下标记录高亮的是哪一个 tab activeIndex
3. 基于下标,动态控制 class 类名
v-bind:class
所谓切换高亮,其实就是改下标
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    ul {
      display: flex;
      border-bottom: 2px solid #e01222;
      padding: 0 10px;
    }
    li {
      width: 100px;
      height: 50px;
      line-height: 50px;
      list-style: none;
      text-align: center;
    }
    li a {
      display: block;
      text-decoration: none;
      font-weight: bold;
      color: #333333;
    }
    li a.active {
      background-color: #e01222;
      color: #fff;
    }

  </style>
</head>
<body>

  <div id="app">
    <ul>
      <li v-for="(item,index) in list" :key="item.id" @click="activeIndex = index">
        <a :class="{active:activeIndex===index}" href="#">{{item.name}}</a>
      </li>
    </ul>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        activeIndex:0,//记录高亮
        list: [
          { id: 1, name: '京东秒杀' },
          { id: 2, name: '每日特价' },
          { id: 3, name: '品类秒杀' }
        ]

      }
    })
  </script>
</body>
</html>

网页显示为: 

操作style 

语法 :style = "样式对象"

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

v-model 应用于其他表单元素 

常见的表单元素都可以用 v-model 绑定关联 → 快速 获取 设置 表单元素的值
它会根据 控件类型 自动选取 正确的方法 来更新元素
输入框 input:text                                  → value
文本域 textarea                                   → checked
复选框 input:checkbox                        → value
单选框 input:radio                               → value
下拉菜单 select                                   → checked
...
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    textarea {
      display: block;
      width: 240px;
      height: 100px;
      margin: 10px 0;
    }
  </style>
</head>
<body>

  <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>
</body>
</html>

computed 计算属性

基础语法

概念: 基于 现有的数据 ,计算出来的 新属性 依赖 的数据变化, 自动 重新计算
语法:
① 声明在 computed 配置项 中,一个计算属性对应一个函数
② 使用起来和普通属性一样使用 {{ 计算属性名 }}
计算属性 → 可以将一段 求值的代码 进行封装

computed 计算属性 vs methods 方法

computed 计算属性:
作用: 封装了一段对于 数据 的处理,求得一个 结果
语法:
① 写在 computed 配置项中
② 作为属性,直接使用 → this.计算属性 {{ 计算属性 }}

缓存特性 (提升性能)
计算属性会对 计算出来的 结果缓存 ,再次使用直接读取缓存,
依赖项变化了,会 自动 重新计算 → 并 再次缓存
methods 方法:
作用: 给实例提供一个 方法 ,调用以处理 业务逻辑
语法:
① 写在 methods 配置项中
② 作为方法,需要调用 → this.方法名( ) {{ 方法名 () }} @ 事件名 =" 方法名 "

计算属性完整写法

计算属性默认的简写,只能读取访问, 不能 "修改"
如果要 "修改" → 需要写计算属性的 完整写法

     

综合案例 - 成绩案例

需求说明:
1. 渲染功能
2. 删除功能
3. 添加功能
4. 统计总分,求平均分
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="./styles/index.css" />
    <title>Document</title>
  </head>
  <body>
    <div id="app" class="score-case">
      <div class="table">
        <table>
          <thead>
            <tr>
              <th>编号</th>
              <th>科目</th>
              <th>成绩</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody v-if="list.length>0">
            <tr v-for="(item,index) in list" :key="item.id">
              <td>{{index+1}}</td>
              <td>{{item.subject}} </td>
              <!-- 需求:不及格的标红 -->
              <td :class="{red:item.score < 60}" >{{item.score}}</td>
              <td><a @click.prevent="del(item.id)" href="#">删除</a></td>
            </tr>
          </tbody>
          <tbody v-else>
            <tr>
              <td colspan="5">
                <span class="none">暂无数据</span>
              </td>
            </tr>
          </tbody>

          <tfoot>
            <tr>
              <td colspan="5">
                <span>总分:{{totalScore}}</span>
                <span style="margin-left: 50px">平均分:{{averageScore}}</span>
              </td>
            </tr>
          </tfoot>
        </table>
      </div>
      <div class="form">
        <div class="form-item">
          <div class="label">科目:</div>
          <div class="input">
            <input
              type="text"
              placeholder="请输入科目"
              v-model.trim="subject"
            />
          </div>
        </div>
        <div class="form-item">
          <div class="label">分数:</div>
          <div class="input">
            <input
              type="text"
              placeholder="请输入分数"
              v-model.number="score"
            />
          </div>
        </div>
        <div class="form-item">
          <div class="label"></div>
          <div class="input">
            <button @click="add()" class="submit" >添加</button>
          </div>
        </div>
      </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <script>
      const app = new Vue({
        el: '#app',
        data: {
          list: [
            { id: 1, subject: '语文', score: 60 },
            { id: 7, subject: '数学', score: 99 },
            { id: 12, subject: '英语', score: 70 },
          ],
          subject: '',
          score: ''
        },
        computed:
        {
          totalScore()
          {
            return this.list.reduce((sum,item)=>sum+item.score,0)
          },
          averageScore()
          {
            if(this.list.length===0)
            {
              return 0
            }
            return (this.totalScore/this.list.length).toFixed(2)
          }
        },
        methods:
        {
          del(id)
          {
            this.list=this.list.filter(item=>item.id !=id)
          },
          add()
          {
            if(!this.subject)
            {
              alert('请输入科目')
              return
            }
            if(typeof this.score!=='number')
            {
              alert('请输入正确的成绩')
              return
            }
            this.list.unshift
            ({
              id:+new Date(),
              subject:this.subject,
              score:this.score
            })
            this.subject=''
            this.score=''
          }
        }
      })
    </script>
  </body>
</html>

watch 侦听器

基础语法

作用: 监视数据变化 ,执行一些 业务逻辑 或 异步操作。
语法:
① 简单写法 → 简单类型数据,直接监视
② 完整写法 → 添加额外配置项

 

完整写法 

② 完整写法 → 添加额外 配置项
(1) deep: true 对复杂类型深度监视
(2) immediate: true 初始化立刻执行一次handler方法

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将PDF转换为Excel?分享这两个实用的方法!

如何将PDF转换为Excel&#xff1f;在我们的日常工作中&#xff0c;我们可能会遇到一些别人发送的PDF文件。这些PDF文件可能包含一些需要我们提取出来做报告的表格或数据信息。如果一个个数据敲入实在是太麻烦了&#xff0c;也很耽误时间&#xff0c;毕竟工作的效率是最重要的。…

云计算的学习(一)

一、云计算的介绍 1.初识云计算及云计算的优势 1.1常见的云计算服务 云文件存储、云音乐、云备份等。 1.2云计算的优势 ①按需自助服务 IT行业需求与客服咨询&#xff0c;了解与自己相适应的云计算服务。 ②广泛的网络接入 只要连接互联网即可使用云计算服务。 ③资源…

一个知识点:delete QProcess的parent时, 启动的子进程会不会销毁?

如题&#xff1a; 好久没有用QProcess了, 一直在搞 wasm 原生c 突然被问到这个 我一想 应该会被销毁 因为下面代码执行的时候 执行delete p 就好杀死进程 QProcess *p new QProcess();p->start("D://FreeClipViewer//FreeClipViewer.exe");delete p;那delete…

总结TLS指纹反爬

前言 在我们参数算法完全还原的情况&#xff0c;请求网站却提示身份认证失败&#xff0c;我们推测可能存在的情况如下&#xff1a; cookieshttp2.0tls指纹 其中什么是tls指纹&#xff1f; TLS指纹&#xff0c;也有人叫JA3指纹。在创建TLS连接时&#xff0c;根据TLS协议在Cl…

Python-opcu啊编程(5)-数据变化通知(datachange_notification)

在OPCUA服务器端&#xff0c;当数据或者变化时&#xff0c;要做一些处理。例如&#xff1a;在聚合服务器或者网关程序中&#xff0c;当客户端修改某一个变量时&#xff0c;需要将修改值传递给底层服务器或者现场总线设备&#xff08;比如modbus设备。 这是一种中继方式。SubHan…

CEC2015动态多目标优化算法:基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2015(提供MATLAB代码)

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法&#xff08;Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on S…

TCP 协议(一)报文

TCP 提供面向连接的通信传输&#xff0c;面向连接是指在传送数据之前必须先建立连接&#xff0c;数据传送完成后要释放连接。无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。在TCP/IP协议中&#xff0c;TCP协议提供可靠的连接服务&#xff0c;连接…

如果你也好奇免费音频转换器哪个好用,就看看这篇吧

在繁忙的都市中&#xff0c;我有幸结识了一个名叫杰克的年轻音乐制作人。杰克是一位对音乐充满热情的创作者&#xff0c;他在这个喧嚣的城市里不断探索着音乐的可能性。然而&#xff0c;他面临着一个令人困扰的问题——他需要将一段重要的音频转换成不同的格式&#xff0c;以便…

有趣的命令——————用shell脚本实现乘法口诀表

vim test.sh 输入以下内容#!/bin/bashfor i in {1..9} dofor ((j1;j<$i;j))doecho -n "${j}x${i}$(($i*$j)) "doneecho done 以下是测试图&#xff1a;有需要的可以过来看看哟&#xff01;&#xff01;&#xff01;

Android Camera2-预览、拍照、录像流程

一、Camera2实现预览、拍照、录像三大基础功能的流程框架图 Camera2关键几个类&#xff1a; CameraManager 管理手机上的所有摄像头设备。管理手机上的所有摄像头设备&#xff0c;它的作用主要是获取摄像头列表和打开&#xff08;openCamera&#xff09;指定的摄像头。 它其…

3.3::ASP.NET Zero Power Tools VS扩展--Crack

ASP.NET Zero Power Tools是一个 Visual Studio 扩展&#xff0c;可以自动创建从数据库到用户界面的实体及其层。因此&#xff0c;您可以在几秒钟内创建一个完全工作、生产就绪的 CRUD 页面。 请注意&#xff0c;Power Tools 仅适用于ASP.NET Core模板&#xff0c;不适用于 AS…

托福口语考试的难度与要求分别是什么?

托福口语很多学生都觉得难度高&#xff0c;那么它的难度到底有哪些&#xff1f;会有哪些要求呢&#xff1f;就随来看看托福口语考试的难点&#xff0c;以及备考的事项。 一、托福口语难点 1、思考时间短&#xff0c;答题时间长 托福独立口语的思考时间仅有15秒&#xff0c;综…

PyAutoGUI实现对LoadRunner报告自动化截图

一、前言 对系统压测后&#xff0c;需要编写汇总报告。LoadRunner场景生成的Analysis报告&#xff0c;要截图保存部分图片。 每次几个功能&#xff0c;每个功能几个并发场景&#xff0c;每个场景有4张左右图片。太多重复性工作了&#xff0c;费时费力。 思考&#xff1a;怎么…

神码融信金融SBG交付二部VP李先林受邀为第十二届中国PMO大会演讲嘉宾

神码融信金融SBG交付二部VP李先林先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;多项目管理的心得体会。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 在后疫情时代&#xff0c;金融科技…

pytorch里torch.gather()和torch.Tensor.scatter()解析

torch.Tensor.scatter() 类似 gather 的反向操作&#xff08;gather是读出数据&#xff0c;scatter是写入数据&#xff09;&#xff0c;所以这里只解析torch.gather()。 gather()这个操作在功能上较为反人类&#xff0c;即使某段时间理解透彻了&#xff0c;过了几个月不碰可能又…

【java】LocalDate获取前一天日期

//获取前一天日期//写法一LocalDate yesterday2 LocalDate.now().minusDays(1);System.out.println(yesterday2);//写法二LocalDate yes1 LocalDate.now().plusDays(-1);System.out.println(yes1);//输入当前日期的年 月 日System.out.println(LocalDate.now().getYear());…

基于AidLux的自动驾驶智能预警应用方案

1. 自动驾驶感知算法及AidLux相关方案介绍 1.1自动驾驶 自动驾驶汽车&#xff0c;又称无人驾驶车、电脑驾驶车、无人车、自驾车&#xff0c;是一种需要驾驶员辅助驾驶或者完全不需要操控的车辆。作为自动化载具&#xff0c;自动驾驶汽车可以不需要人类操作即能感知环境及导航…

dvwa靶场通关(九)

第九关&#xff1a;Weak Session IDs&#xff08;弱会话IDs&#xff09; 当用户登录后&#xff0c;在服务器就会创建一个会话(session)&#xff0c;叫做会话控制&#xff0c;接着访问页面的时候就不用登录&#xff0c;只需要携带 Sesion去访问。 sessionID作为特定用户访问站…

领导力指南:高效带领产品设计团队,成就卓越绩效!

产品设计团队负责创造功能性、用户友好性和视觉吸引力的产品。产品设计过程是产品设计师和他们的团队遵循的一系列阶段&#xff0c;以帮助履行他们的角色和责任。在本文中&#xff0c;我们将探讨产品设计团队应该做些什么。 1、定义产品的愿景 创造一个成功产品的第一步是定义产…

prometheus监控Nacos

Nacos监控 &#x1f4da;概述 Nacos 0.8.0版本完善了监控系统&#xff0c;支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态&#xff0c;目前支持prometheus、elastic search和influxdb&#xff0c;下面结合prometheus和grafana如何监控Nacos&#xff0c;官网gra…