首页 > 其他分享 >day01

day01

时间:2024-02-19 22:58:06浏览次数:27  
标签:Vue 渲染 day01 指令 key data 表达式

day01

目录

  • Vue 是一套构建用户界面的渐进式框架

渐进式

  • 所谓渐进式就是循序渐进,不一定非得把 Vue 中的所有 API 都学完才能开发 Vue

Vue 的两种开发方式:

image-20231216160052051

  1. Vue 核心包开发

    场景:局部模块改造

  2. Vue 核心包 & Vue 插件 & 工程化

    场景:整站开发

框架

  • 所谓框架:就是一套完整的解决方案

    • 提到框架,不得不提一下库

    • 库,类似工具箱,是一堆方法的集合,比如 axios、lodash、echarts 等

  • 框架,是一套完整的解决方案,实现了大部分功能,我们只需要按照一定的规则去编码即可

  • 框架的特点:有一套必须让开发者遵守的规则或者约束

创建 Vue 实例

  • html 页面里

  • 核心步骤(4步):

  1. 准备容器 <div id="app"> xxx </div>

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

    • 到 v2 官网找版本下载
    • 或是用代码:<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  3. 创建 Vue 实例,如:const app = new Vue({ })

  4. 指定配置项,渲染数据

    1. el: 指定挂载点(是渲染管理的哪个盒子:id="app" 的 div 盒子)
    2. data: 提供数据
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          msg: 'xxxx'
        }
      })
    </script>
    

插值表达式 {

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

  • 我们可以用插值表达式渲染出 Vue 提供的数据

作用:利用表达式进行插值,渲染到页面中

  • 表达式:是可以被求值的代码,JS 引擎会将其计算出一个结果

语法

插值表达式语法:{{ 表达式 }}

<h3>{{title}}<h3>
<p>{{nickName.toUpperCase()}}</p>
<p>{{age >= 18 ? '成年':'未成年'}}</p>
<p>{{obj.name}}</p>
<p>{{fn()}}</p>

注意

  • 在插值表达式中使用的数据必须在 data 中进行了提供
  • 支持的是表达式,而非语句,比如:if、for ...
  • 不能在标签属性中使用 {{ }} 插值(插值表达式只能标签中间使用)

响应式特性

  • 响应式简单理解就是数据变,视图对应变

访问和修改 data 中的数据

  • data 中的数据,最终会被添加到实例上,最简单的就是在 F12 的 Console 里可以输入查看
    • 访问数据:直接输入 " 实例.属性名 " 回车,就打印出数据了

    • 修改数据:直接输入 "实例.属性名" = "值" 回车,页面数据就更改了

Vue 中的常用指令

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

  • vue 中的指令按照不同的用途可以分为如下 6 大类:

    • 内容渲染指令(v-html、v-text)

    • 条件渲染指令(v-show、v-if、v-else、v-else-if)

    • 事件绑定指令(v-on)

    • 属性绑定指令 (v-bind)

    • 双向绑定指令(v-model)

    • 列表渲染指令(v-for)

内容渲染指令

  • 内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常用的内容渲染指令有如下两个:

    • v-text(类似 innerText)

      • 使用语法:<p v-text="uname">hello</p>,意思是将 uame 值渲染到 p 标签中
      • 类似 innerText,使用该语法,会覆盖 p 标签原有内容,即 hello 就无了
    • v-html(类似 innerHTML)

      • 就能够解析 HTML 的标签,将标签的样式呈现出来

        <p v-html="intro">hello</p>
        
        data:{
        	intro:'<h2>这是一个<strong>非常优秀</strong>的xxx<h2>'
        }
        

条件渲染指令

  • 条件判断指令,用来辅助开发者按需控制 DOM 的显示与隐藏。条件渲染指令有如下两个,分别是:
  1. v-show

    • 作用:控制元素显示隐藏
    • 语法:v-show = "表达式" 表达式值为 true 显示, false 隐藏
    • 原理:切换 css 的 display:none 控制显示隐藏
    • 场景:频繁切换显示隐藏的场景
  2. v-if

    • 作用:控制元素显示隐藏(条件渲染:false 的话就移除标签
    • 语法:v-if= "表达式" 表达式值 true 显示,false 隐藏
    • 原理:基于条件判断,是否创建或移除元素节点
    • 场景:要么显示,要么隐藏,不频繁切换的场景
      • 如给未登录的显示 “ 请登录 ”,已经登录的就不加以显示
  3. v-elsev-else-if

    • 作用:辅助 v-if 进行判断渲染
    • 语法:v-elsev-else-if = "表达式"
    • 需要紧接着 v-if 的后面使用,不能单独用

事件绑定指令

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

  • 使用 Vue 时,如需为 DOM 注册事件,及其的简单,语法如下:

    • <button v-on:事件名="内联语句">按钮</button>

      • 内联语句:可视化代码,如:@click="count--"
    • <button v-on:事件名="处理函数">按钮</button>

    • <button v-on:事件名="处理函数(实参)">按钮</button>

    • v-on: 简写为 @

      • 点击事件:@click
      • 鼠标滑动事件:@mouseenter
  1. 事件处理函数

    • 注意:
      • 事件处理函数应该写到一个跟 data 同级的配置项(methods)中
    • methods 中的函数内部的 this 都指向 Vue 实例
      • 例:this.data 值 使用
  2. 给事件处理函数传参

    • 如果不传递任何参数,则方法无需加小括号;methods 方法中可以直接使用 e 当做事件对象

      handleClick(e) {
        console.log('点击事件对象:', e);
      }
      
    • 如果传递了参数:<button @click="handleClick('Hello', $event)">Click me</button>,则实参 $event 表示事件对象(占位)

      handleClick(message, e) {
        console.log(message); // 输出: Hello
        console.log('点击事件对象:', e);
      }
      
      • 可打印出 e 内容,找自己需要的部分

属性绑定指令

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

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

    • v-bind 可以简写成 :
  • 比如,有一个图片,它的 src 属性值,是一个图片地址。这个地址在数据 data 中存储,则可以这样设置属性值:

    • <img v-bind:src="url" /><img :src="url" />
    • url 为 data 里一个照片的路径的变量名

列表渲染指令

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

  • v-for 指令需要使用 (item, index) in arr 形式的特殊语法,其中:

    • item:数组中的每一项

    • index:每一项的索引,不需要可以省略

      • (item) in arritem in arr
    • arr:被遍历的数组

  • 此语法也可以遍历对象和数字

  • 实例代码:

    <ul>
      <li v-for="(item, index) in xxList" :key="item.id">
        <span>{{ item.name }}</span>
        <span>{{ item.price }}</span>
        <button @click="del(item.id)">删除</button>
      </li>
    </ul>
    
    <!--  筛选删除:  -->
    this.xxList = this.xxList.filter(item => item.id !== 传来的id)
    
    • filter 是收集新数据到新数组,而不会改变原数组

v-for 中的 key

  • 语法:key="唯一值"

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

    • 上述代码 <li v-for="(item, index) in xxList" :key="item.id"> 里的 :key="item.id",在这里去掉 key 并不会报错,但是失去了唯一标识,在日后进行渲染的时候很可能出问题
  • 为什么加 key:Vue 的默认行为会尝试原地修改元素(就地复用)

    • 就例如,xxList 数组的每一列的例的样式不同 " 红橙黄绿 ",然而不加 key 确实是删除了那一个 xxList 内容,但是 vue 的就地复用没有删除对应的例,即对应的样式仍保留了(没有 key 唯一标识上),所以不管删除哪一个元素,例的样式都是保留着 " 红橙黄 ",再删一个就是保留 " 红橙 "

    • 即:每次删除最后的一个例,然后取 xxList 内容放到剩余例的样式上,并没有把想要删的那个例样式和内容一起删去

    • 就是例和 xxList 的内容没有 key 唯一,就成了分离开的两大块了,每次显示的时候现场拼合

  • 注意:

    1. key 的值只能是字符串 或 数字类型

    2. key 的值必须具有唯一性

    3. 推荐使用 id 作为 key(唯一),不推荐使用 index 作为 key(会变化,不对应)

双向绑定指令

  • 所谓双向绑定就是:

    1. 数据改变后,呈现的页面结果会更新

    2. 页面结果更新后,数据也会随之而变

  • 作用: 给表单元素(input、radio、select)使用,双向绑定数据,可以快速获取或设置表单元素内容

  • 语法:v-model="变量"

关于 v-model 修饰符

  • v-model.trim:去除首位空格
  • v-model.number:转为数字
    • 要是输入的是 abc 也不会强转成数字,就是 "abc"

标签:Vue,渲染,day01,指令,key,data,表达式
From: https://www.cnblogs.com/zhu-ya-zhu/p/18022111

相关文章

  • 爬虫——day01
    爬虫介绍爬虫是什么? -通过编程技术---》把互联网中的数据---》获取到---》数据清洗---》存到库中python:request,selenium---》app,小程序,网站---》xpaht,lxml---》mysql,redis,文件,excel,mongodb-通过编程语言---》模拟发送http请求---》获取数据---》解析--》入库......
  • day01_运维介绍与虚机安装
    上课须知1.上课的软件笔记软件typora记录markdown语法的文本编辑器通讯录于超1110-110101教你如何搭建游戏私服看看运维的操作。。网页游戏browser/server浏览器/服务器www.4399.comwww.taobao.com,服务端更新了,www.jd.com1.服务端,有一个企业,部署......
  • RegenDay01
    基本情况学到了不少,多谢雷根哥!拼接1学了另外两种写法,拼接2学了正解,后面还学到用拓扑排序判环,以及dfs来找连通块中的点数量充满希望的拼接质数1T246207充满希望的拼接质数1-洛谷|计算机科学教育新生态(luogu.com.cn)MySolutionDFS,通过让下标递增来找不同方案。intm......
  • Day01 GUI编程入门
    GUI编程入门告诉大家该怎么学?这是什么?它怎么玩?该如何去在我们平时运用?组件窗口弹窗面板文本框列表框按钮图片监听事件鼠标键盘事件破解工具1、简介Gui的核心技术:SwingAWT不流行的原因:​1.因为界面不美观。​2.需要jre环......
  • day01-面向对象高级
    day01——面向对象高级各位同学,接下来的三天课程中,我们继续学习面向对象的相关课程。面向对象是写Java程序的核心套路,如何你不懂面向对象,那就相当于Java你白学了。所以在接下来的三天时间里,各位同学也需要克服重重困难好好学习。前面我们说过面向对象最核心的套路是:设计对象来处......
  • day01
    /**这是一个入门程序可以在控制台输出HelloWorld*/publicclassHelloWorld{ /* 这是一个main方法,又称主方法,是程序的入口 */ publicstaticvoidmain(String[]args){ //这是一条输入语句,会输入小括号里的内容 System.out.println("HelloWorld"); System.out......
  • DAY01
    Markdown学习二级标题三级标题四级标题引用哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈分割线列表abc表格名字性别生日张三男1997.1.1代码......
  • MetaGPT day01: MetaGPT作者代码走读、软件公司初始示例
    LLM发展历史-2013年word2vec提出,但效果不好-2017年Transformer结构提出,降低网络复杂度-2018年BERT预训练语言模型效果显著提升-2019年GPT-3推出,采用大规模预训练-2020年InstructionTuning提出,实现零样本学习-2022年InstructGPT解决模型毒性问题-当前GPT-4成本......
  • 30dayOs_day01
    tags:["Os"]今天拆箱后看着软驱和软盘感觉好激动,老古董欸~把软盘放进软驱,软驱连接电脑,按照教程格式化硬盘,注意不要勾选快速格式化。在运行!cons_9x.bat输入install时出了问题,作者的设计是在这里应该把映像文件写进软盘,然而tolset\z_tools\imgtol.com是16位程序,和64位版本的wi......
  • day01 代码随想录算法训练营 27. 移除元素
    题目:27.移除元素感悟:用快慢指针。本题是要原地删除。而删除这个行为在真实的计算机的数组里,是覆盖。所以,就用两个指针,(人)一个跑的快,一个跑的慢。他们身上带了个对讲机。跑的快的那个人负责检测后面的数字符合要求不,比如,要不等于3的,遇到一个2,告诉跑的慢的说2符合要求。遇......