Vue(二)

文章目录

    • 1.条件渲染
        • 1.关于js中的false的判定
        • 2.基本介绍
        • 3.v-if
          • 1.需求分析
          • 2.代码实例
        • 4.v-show实现
        • 5.v-if与v-show比较
        • 6.课后练习
    • 2.列表渲染
        • 1.代码实例
        • 2.课后练习
    • 3.组件化编程
        • 1.基本介绍
        • 2.实现方式一_普通方式
        • 2.实现方式二_全局组件方式
        • 3.实现方式三_局部组件方式
    • 4.生命周期和监听函数(钩子函数)
        • 1.基本介绍
        • 2.示意图
          • 简要介绍生命周期
          • 详细介绍生命周期(前六个重点)
        • 3.案例演示
          • 1.需求分析
          • 2.代码实例

1.条件渲染

1.关于js中的false的判定
  1. null
  2. NaN
  3. undefined
  4. “”
2.基本介绍

在判断的时候,会在数据池中寻找对应的变量,根据判定结果来进行操作

image-20240214181536838

image-20240214181550212

3.v-if
1.需求分析

image-20240214181813935

2.代码实例
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml"
      xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <!-- 引入vue -->
  <script src="vue.js"></script>
</head>
<body>

<div id="app">
  <!--  双向绑定  -->
  <h5><input type="checkbox" v-model:checked="checked">是否同意条款</h5>
  <h4 v-if="checked">同意</h4>
  <h4 v-else>不同意</h4>
  
</div>

<!--注意:这里的script需要写在后面-->
<script>
  // 创建一个vue对象(Model)
  var vue = new Vue({
    // 绑定view层
    el: "#app",
    // 数据池
    data: {
      checked: false
    },
    // 方法池
    methods: {
    }
  });

</script>
</body>
</html>
<script setup>
</script>

image-20240214183121829

image-20240214183128088

4.v-show实现
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml"
      xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <!-- 引入vue -->
  <script src="vue.js"></script>
</head>
<body>

<div id="app">
<!--  双向绑定  -->
  <h5><input type="checkbox" v-model:checked="checked">是否同意条款</h5>
  <h4 v-show="!checked">不同意</h4>
  <h4 v-show="checked">同意</h4>

</div>

<!--注意:这里的script需要写在后面-->
<script>
  // 创建一个vue对象(Model)
  var vue = new Vue({
    // 绑定view层
    el: "#app",
    // 数据池
    data: {
      checked: false
    },
    // 方法池
    methods: {
    }
  });

</script>
</body>
</html>
<script setup>
</script>
5.v-if与v-show比较
  1. v-if:动态创建和销毁,开销大
  2. v-show:使用css切换可见度,并没有创建和销毁,开销小
6.课后练习

image-20240214184722457

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml"
      xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 引入vue -->
    <script src="vue.js"></script>
</head>
<body>

<div id="app">
<!--    双向绑定value-->
    <h3>输入成绩1-100&nbsp;<input type="text" v-model="value"></h3>
    <h4 v-if="value>90">您的成绩是{{value}}<br>
        优秀
    </h4>
    <h4 v-else-if="value>70">您的成绩是{{value}}<br>
        良好
    </h4>
    <h4 v-else-if="value>60">您的成绩是{{value}}<br>
        及格
    </h4>
    <h4 v-else>您的成绩是{{value}}<br>
        不及格
    </h4>
    
</div>

<!--注意:这里的script需要写在后面-->
<script>
    // 创建一个vue对象(Model)
    var vue = new Vue({
        // 绑定view层
        el: "#app",
        // 数据池
        data: {
            value: 85
        },
        // 方法池
        methods: {}
    });

</script>
</body>
</html>
<script setup>
</script>

image-20240214190219665

2.列表渲染

1.代码实例
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml"
      xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 引入vue -->
    <script src="vue.js"></script>
</head>
<body>

<div id="app1">
    <h2>简单的列表渲染</h2>
    <ul>
        <li v-for="i in 3">
            {{i}}
        </li>
    </ul>
    <h2>简单的列表渲染——带索引</h2>
    <ul>
        <li v-for="(i, index) in 3">
            {{index}} -- {{i}}
        </li>
    </ul>
    <h2>简单的列表渲染——遍历对象数组</h2>
    <table border="2px" width="400px">
        <tr v-for="monster in monsters">
            <td>{{monster.id}}</td>
            <td>{{monster.name}}</td>
            <td>{{monster.age}}</td>
        </tr>
    </table>
</div>

<!--注意:这里的script需要写在后面-->
<script>
    // 创建一个vue对象(Model)
    var vue = new Vue({
        // 绑定view层
        el: "#app1",
        // 数据池
        data: {
            //一个数组
            monsters: [
                {id: 1, name: "牛魔王", age: 100},
                {id: 2, name: "黑山老妖", age: 200},
                {id: 3, name: "红孩儿", age: 300}
            ]
        },
        // 方法池
        methods: {}
    });


</script>
</body>
</html>
<script setup>
</script>

image-20240214193328461

2.课后练习

image-20240214193454623

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <table border="1px" width="400px">
        <!--if和for可以写在一起-->
        <tr v-if="student.score > 60" v-for="student in students">
            <td>{{student.id}}</td>
            <td>{{student.name}}</td>
            <td>{{student.age}}</td>
            <td>{{student.score}}</td>
        </tr>
    </table>
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            students: [
                {id: 1, name: "jack", age: 12, score: 90},
                {id: 2, name: "tom", age: 32, score: 30},
                {id: 3, name: "mary", age: 22, score: 80},
                {id: 4, name: "lisa", age: 13, score: 20},
                {id: 5, name: "lihua", age: 11, score: 94}
            ]
        }
    })
</script>
</body>
</html>

image-20240214194643422

3.组件化编程

1.基本介绍

image-20240214195020100

image-20240214195515303

2.实现方式一_普通方式

image-20240214195629725

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="vue.js"></script>
</head>
<body>

<div id="app">
<!--
1.三个按钮其实一样,业务逻辑也一样,却重新写了一次,复用性低
2.解决:组件化编程
-->
  <button v-on:click="add">点击次数={{count}}次</button><br>
  <button v-on:click="add1">点击次数={{count1}}次</button><br>
  <button v-on:click="add2">点击次数={{count2}}次</button>
</div>

<script>
  new Vue({
    el: "#app",
    data: {
      count: 10,
      count1: 10,
      count2: 10
    },
    methods: {
      add() {
        this.count ++;
      },
      add1() {
        this.count1 ++;
      },
      add2() {
        this.count2 ++;
      }
    }
  })
</script>

</body>
</html>

image-20240214200728031

2.实现方式二_全局组件方式
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="vue.js"></script>
</head>
<body>

<div id="app">
<counter></counter>
<counter></counter>
<counter></counter>
<counter></counter>

</div>

<script>
  //编写全局组件
  Vue.component("counter", {
    template: `<button v-on:click="add">点击次数={{count}}次</button>`,
    data() {
      return {
        count: 10 //每次创建一个组件,都会有一个新的count跟template绑定,而方法是共享的
      }
    },
    methods: {
      add() {
        this.count ++;
      }
    }
  })
  new Vue({
    //由于是全局组件,所以即使这里什么都不写,也是包含了组件
    el: "#app"
  })
</script>

</body>
</html>

image-20240214203227887

3.实现方式三_局部组件方式
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="vue.js"></script>
</head>
<body>

<div id="app">
  <counter></counter>
  <counter></counter>
  <counter></counter>
  <counter></counter>
</div>

<script>
  //编写局部组件
  let counter = {
    template: `<button v-on:click="add">点击次数={{count}}次</button>`,
    data() {
      return {
        count: 10 //每次创建一个组件,都会有一个新的count跟template绑定,而方法是共享的
      }
    },
    methods: {
      add() {
        this.count ++;
      }
    }
  }

  new Vue({
    //由于是局部组件,所以需要在这里引用才能使用
    el: "#app",
    components: {
      counter //这里是ES6新特性,这样这个属性的名字和变量名相同相当于counter: counter
    }
  })
</script>

</body>
</html>

image-20240214204242353

4.生命周期和监听函数(钩子函数)

1.基本介绍

image-20240215093859697

2.示意图

image-20240215095330815

简要介绍生命周期
  1. **beforeCreate:**初始化view
  2. **created:**初始化model中的data和methods(常用ajax请求)
  3. **beforeMount:**挂载之前,并没有渲染数据
  4. **mounted:**通过el挂载到view,实现数据渲染
  5. 循环监听数据池的变化,一旦发生改变执行下一步
  6. **beforeUpdate:**数据池更新,但是没有渲染到view
  7. **updated:**将数据池中的数据渲染到view
详细介绍生命周期(前六个重点)
  1. beforeCreate:这是最初的阶段,此时组件的 data 和 methods 都还未初始化。
  2. created:在这个阶段,组件的 data 和 methods 已经被初始化了。如果要对数据进行调用或修改(发出Ajax请求),这个阶段是合适的。但此时还没有开始渲染模板,$el 属性目前不可见。
  3. beforeMount:在挂载开始之前被调用,相关的 render 函数首次被调用。此时,模板中的数据还没有被渲染到页面上。
  4. mounted:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。在这一步,实例已经挂载,因此可以通过 DOM API 访问到页面上的 DOM 元素,数据已经可以显示在视图上了。
  5. beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。你可以在这个钩子中进一步地更改状态,不会触发附加的重渲染过程。
  6. updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作,数据变化后更新视图。
  7. beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用,这意味着你可以在这个钩子中执行清理操作。
  8. destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
3.案例演示
1.需求分析

image-20240215101736510

2.代码实例
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>

<div id="app">
    <span id="num">{{num}}</span>
    <button @click="add">点赞!</button>
    <h2>{{name}}有{{num}}次点赞</h2>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            name: "jack",
            num: 0
        },
        methods: {
            show() {
                return this.name;
            },
            add() {
                this.num ++;
            }
        },
        //只是初始化了view
        beforeCreate() {
            console.log("======beforeCreate======");
            console.log("数据模型/数据池的数据是否加载/使用?[no]",this.name, "", this.num)
            // console.log("自定义方法是否加载/使用?[no]",this.show(), "", this.add())
            console.log("用户页面dom是否加载/使用?[yes]",document.getElementById("num"))
            console.log("用户页面dom是否被渲染?[no]",document.getElementById("num").innerText)
        },
        //初始化model中的data和methods
        created() {
            console.log("======created======");
            console.log("数据模型/数据池的数据是否加载/使用?[yes]",this.name, "", this.num)
            console.log("自定义方法是否加载/使用?[yes]",this.show(), "", this.add())
            console.log("用户页面dom是否加载/使用?[yes]",document.getElementById("num"))
            console.log("用户页面dom是否被渲染?[no]",document.getElementById("num").innerText)
            //可以发出ajax请求
            //接受返回的数据
            //再次去更新data数据池中的数据
            //在后面挂载的时候渲染view
        },
        //挂载之前,并没有渲染view
        beforeMount() {
            console.log("======beforeMount======");
            console.log("数据模型/数据池的数据是否加载/使用?[yes]",this.name, "", this.num)
            console.log("自定义方法是否加载/使用?[yes]",this.show(), "", this.add())
            console.log("用户页面dom是否加载/使用?[yes]",document.getElementById("num"))
            console.log("用户页面dom是否被渲染?[no]",document.getElementById("num").innerText)
        },
        //挂载阶段:通过el挂载到view,实现数据渲染
        mounted() {
            console.log("======mounted======");
            console.log("数据模型/数据池的数据是否加载/使用?[yes]",this.name, "", this.num)
            console.log("自定义方法是否加载/使用?[yes]",this.show(), "", this.add())
            console.log("用户页面dom是否加载/使用?[yes]",document.getElementById("num"))
            console.log("用户页面dom是否被渲染?[yes]",document.getElementById("num").innerText)
        },
        //数据池更新,并保存这个状态,但是用户界面的dom数据不会被更新
        beforeUpdate() {
            console.log("======beforeUpdate======");
            console.log("数据模型/数据池的数据是否加载/使用?[yes]",this.name, "", this.num)
            console.log("自定义方法是否加载/使用?[yes]",this.show(), "", this.add())
            console.log("用户页面dom是否加载/使用?[yes]",document.getElementById("num"))
            console.log("用户页面dom数据是否被更新?[no]",document.getElementById("num").innerText)
        },
        //渲染用户界面的dom,更新数据
        updated() {
            console.log("======updated======");
            console.log("数据模型/数据池的数据是否加载/使用?[yes]",this.name, "", this.num)
            console.log("自定义方法是否加载/使用?[yes]",this.show(), "", this.add())
            console.log("用户页面dom是否加载/使用?[yes]",document.getElementById("num"))
            console.log("用户页面dom数据是否被更新?[yes]",document.getElementById("num").innerText)
        }

    })
</script>

</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

拥抱企业消费新纪元,胜意科技2024代理人大会圆满落幕

因信赖相聚&#xff0c;为共赢而来。近日&#xff0c;由胜意科技主办的“做好生意&#xff0c;拥抱胜意——2024代理人大会”在武汉成功召开&#xff0c;吸引了全国各地百余家TMC生态合作伙伴齐聚一堂&#xff0c;共同探讨数字化浪潮下的差旅管理实践&#xff0c;激发增长新智慧…

十大排序——9.桶排序

这篇文章我们来介绍一下桶排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 桶排序和计数排序一样&#xff0c;都不是基于比较进行排序的。 下面通过一个例子来理解一下桶排序吧。 首先&#xff0c;给你一个无序数组[ 20,18,28,66,25,31,67,30 ]&#xff0c;然后&#…

【GD32】_时钟架构及系统时钟频率配置

文章目录 一、有关时钟源二、系统时钟架构三、时钟树分析四、修改参数步骤1、设置外部晶振2、选择外部时钟源。3、 设置系统主频率大小4、修改PLL分频倍频系数 学习系统时钟架构和时钟树&#xff0c;验证及学习笔记如下&#xff0c;如有错误&#xff0c;欢迎指正。主要记录了总…

【电控笔记2.2】电流回路+延迟效应

延迟效应的来源以及影响 数字控制系统的delay: 5.4节有介绍T0=0.5TS 低通滤波器的时间常数? 滤波器的传递函数与性能参数

C语言入门第四天(数组)

一、C语言数组的基本语法 1.数组的定义 数组是 C 语言中的一种数据结构&#xff0c;用于存储一组具有相同数据类型的数据。数组中的每个元素可以通过一个索引&#xff08;下标&#xff09;来访问&#xff0c;索引从 0 开始&#xff0c;最大值为数组长度减 1。 2.定义语法格式 …

Linux进阶篇:文件传输工具curl命令详解

文件传输工具Linux curl命令详解 一 curl命令介绍 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;可以说是一款很强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具&#xff0c;但按传统&#xff0c;习惯称url为下载工具。…

leetcode-反转链表

206. 反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3…

OpenHarmony南向开发实例:【游戏手柄】

介绍 基于TS扩展的声明式开发范式编程语言&#xff0c;以及OpenHarmony的分布式能力实现的一个手柄游戏。 完成本篇Codelab需要两台开发板&#xff0c;一台开发板作为游戏端&#xff0c;一台开发板作为手柄端&#xff0c;实现如下功能&#xff1a; 游戏端呈现飞机移动、发射…

jenkins构建微信小程序并展示二维码

测试小程序的过程中&#xff0c;很多都是在回头和前端开发说一句&#xff0c;兄弟帮我打一个测试版本的测试码&#xff0c;开发有时间的情况下还好&#xff0c;就直接协助了&#xff0c;但是很多时候他们只修复了其中几个bug&#xff0c;其他需要修复的bug代码正在编写&#xf…

Unity 左右折叠显示与隐藏UI的简单实现

要实现一个简单的UI左右折叠显示与隐藏&#xff0c;可以结合遮罩&#xff0c;通过代码控制UI区块的宽度和位移来实现。 具体可以按以下步骤实现&#xff1a; 1、新建一个Image组件&#xff0c;并添加精灵&#xff0c;调整大小后&#xff0c;复制一份作为该UI的父物体&#xf…

rhce.定时任务和延迟任务项目

一 . 在系统中设定延迟任务要求如下&#xff1a; 在系统中建立 easylee 用户&#xff0c;设定其密码为 easylee 延迟任务由 root 用户建立 要求在 5 小时后备份系统中的用户信息文件到/backup中 确保延迟任务是使用非交互模式建立 确保系统中只有 root 用户和easylee用户可以…

当当图书网数据采集分析:10万条数据的深入洞察

基于搜索结果&#xff0c;我将为您提供一个关于当当图书网数据采集的文章框架&#xff0c;假设我们已经有了10万条数据的采集结果。请注意&#xff0c;由于没有具体的数据文件&#xff0c;以下内容将是一个示例性的框架&#xff0c;您可以根据实际采集到的数据进行填充和调整。…

AI人工智能老师大模型讲师叶梓 OneLLM:开创性的多模态大型语言模型技术

在人工智能领域&#xff0c;多模态大型语言模型&#xff08;MLLM&#xff09;的研究一直是一个热门话题。近期&#xff0c;一种名为OneLLM的创新技术引起了业界的广泛关注。OneLLM通过其独特的统一框架&#xff0c;实现了多种不同模态与自然语言的高效对齐&#xff0c;为多模态…

什么是NAT!

一、NAT&#xff08; network address translation&#xff09; 网络地址翻译 为什么会出现这个技术&#xff0c;目的就是用来解决ipv4 地址不够用的情况&#xff0c;因为在互联网最开始的时候&#xff0c;有一个概念是拥有合法IP地址&#xff0c;每个主机连接到互联网必须要…

Big Data and Cognitive Computing (IF=3.7) 计算机/大数据/人工智能期刊投稿

Special Issue: Artificial Cognitive Systems for Computer Vision 欢迎计算机/大数据/人工智能/计算机视觉相关工作的投稿&#xff01; 影响因子3.7&#xff0c;截止时间2024年12月31日 投稿咨询&#xff1a;lqyan18fudan.edu.cn 投稿网址&#xff1a;https://www.mdpi.com/j…

RK3568笔记二十二:基于TACO的垃圾检测和识别

若该文为原创文章&#xff0c;转载请注明原文出处。 基于TACO数据集&#xff0c;使用YOLOv8分割模型进行垃圾检测和识别&#xff0c;并在ATK-RK3568上部署运行。 一、环境 1、测试训练环境&#xff1a;AutoDL. 2、平台&#xff1a;rk3568 3、开发板: ATK-RK3568正点原子板子…

Ubuntu Vs code配置ROS开发环境

文章目录 1.开发环境2.集成开发环境搭建2.1 安装Ros2.2 安装 Vs code2.3 安装vs code 插件 3.Vs code 配置ROS3.1 创建ROS工作空间3.2 从文件夹启动Vs code3.3 使用Vscode 编译ROS 空间3.4 使用Vs code 创建功能包 4.编写简单Demo实例4.1编写代码4.2编译与执行 1.开发环境 系统…

(文章复现)分布式电源选址定容的多目标优化算法

参考文献&#xff1a; [1]夏澍,周明,李庚银.分布式电源选址定容的多目标优化算法[J].电网技术,2011,35(09):115-121. [2] Ye Tian, Ran Cheng, Xingyi Zhang, and Yaochu Jin, “PlatEMO: A MATLAB platform for evolutionary multi-objective optimization [educational for…

毕设论文的分类号与UDC查询

对于毕业论文分类号与UDC&#xff0c;可以根据个人研究领域查询。 中图分类号查询链接&#xff1a; 中图分类号查询 | 中国图书馆分类法 | 中图法 | 中图分类号 (clcindex.com)https://www.clcindex.com/category/ UDC查询链接: UDC Summaryhttps://udcsummary.info/php/ind…

探秘计算机内部的魔法:模拟计算机内部的怎么使用门电路实现运算的奥秘

1.前言 在当今数字时代&#xff0c;我们享受着计算机带来的便利和效率&#xff0c;但很少有人意识到在计算机背后的神秘世界。计算机内部运算的奥秘并非仅仅是一系列简单的加减乘除&#xff0c;而是依托着深奥的门电路与位运算符展开的神秘舞蹈。在这篇博客中&#xff0c;我们…
最新文章