谷粒商城实战笔记-36-前端基础-Vue-介绍HelloWorld

文章目录

  • 一,MVVM 思想
    • 直接操作DOM的示例
    • 使用Vue和MVVM的示例
    • MVVM与DOM操作的主要区别
  • 二,Vue 简介
  • 三,第一个Vue项目
    • 1 新建项目
    • 2 安装依赖
    • 3 使用Vue

这一节的主要内容是演示Vue的简单使用。

一,MVVM 思想

  • M:即 Model,模型,包括数据和一些基本操作
  • V:即 View,视图,页面渲染结果
  • VM:即 View-Model,模型与视图间的双向操作(无需开发人员干涉)

在 MVVM 之前,开发人员从后端获取需要的数据模型,然后要通过 DOM 操作 Model 渲染到 View 中。

当视图改变后,我们还需要通过 DOM 获取 View 中的数据,然后同步到Model 中。

MVVM 中的 VM 要做的事情就是把 DOM 操作完全封装起来,开发人员不用再关心 Model 和 View 之间是如何互相影响的:

  • 只要我们 Model 发生了改变,View 上自然就会表现出来。
  • 当用户修改了 View,Model 中的数据也会跟着改变。

把开发人员从繁琐的 DOM 操作中解放出来,把关注点放在如何操作 Model 上。

直接操作DOM的示例

假设我们有一个简单的计数器应用,我们希望每次点击按钮时,页面上显示的数字增加1。

<!-- index.html -->
<div id="app"><p>Count: <span id="count">0</span></p><button id="increment">Increment</button>
</div><script>document.getElementById('increment').addEventListener('click', function () {var countElement = document.getElementById('count');var currentCount = parseInt(countElement.textContent, 10);countElement.textContent = currentCount + 1;});
</script>

在这个例子中,直接通过getElementById获取DOM元素,并在事件处理器中修改这些元素的内容。虽然这种方法简单直观,但在复杂的用户界面和状态管理中,它容易导致代码冗长且难以维护。

使用Vue和MVVM的示例

同样的计数器应用,使用Vue框架和MVVM模式,代码看起来会更简洁且易于理解:

<!-- index.html -->
<div id="app"><p>Count: {{ count }}</p><button @click="increment">Increment</button>
</div><script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<script>new Vue({el: '#app',data: {count: 0},methods: {increment: function () {this.count++;}}});
</script>

在这个Vue版本的示例中,不再直接操作DOM,而是通过定义data属性和methods来描述应用的状态和行为。Vue框架负责监听状态变化并自动更新视图,这使得代码更加简洁,逻辑更加清晰,也更容易扩展和维护。

MVVM与DOM操作的主要区别

  1. 数据绑定:在MVVM模式下,数据和视图之间是双向绑定的,数据的更改会自动反映在视图上,反之亦然。而在直接操作DOM的情况下,你需要手动更新DOM以反映数据的变化。

  2. 代码结构:MVVM模式鼓励将数据、逻辑和视图分开,这使得代码更加模块化和可测试。直接操作DOM往往会导致代码混合在一起,增加理解和维护的难度。

  3. 性能优化:Vue等MVVM框架通常会缓存和批处理DOM更新,从而提高性能。直接操作DOM可能需要更多的CPU资源,尤其是在频繁更新DOM的情况下。

综上所述,虽然直接操作DOM在某些简单场景下可能是合适的,但在构建复杂和动态的Web应用时,MVVM模式和Vue这样的框架提供了更高效、更优雅的解决方案。

二,Vue 简介

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

总之,Vue能简化前端开发,提升开发效率。

官网:https://cn.vuejs.org/
参考:https://cn.vuejs.org/v2/guide/
Git 地址:https://github.com/vuejs

三,第一个Vue项目

1 新建项目

新建文件夹vue2并在vscode中打开,因为我们要使用npm对前端工程进行管理,所以使用下面的命令初始化项目:

npm init -y

初始化完成后,在工程根目录下会自动生成一个文件package.json

在这里插入图片描述

2 安装依赖

执行如下命令安装vue依赖。

npm install vue@^2

安装完成后,会在工程根目录下多出一个node_modules的文件夹。

在这里插入图片描述

packag.json文件中新增了关于vue的依赖声明。

在这里插入图片描述

3 使用Vue

第一步,在工程根目录下,创建index.html文件。

在这里插入图片描述

第二步,引入vue。

<script src="./node_modules/vue/dist/vue.js"></script>

第三步,创建一个简单的view。

<div id="app"><h1>{{name}},非常帅</h1>
</div>
  • <div id="app">:这是一个普通的HTML <div> 元素,用作Vue应用的根元素。Vue实例将挂载到这个元素上。
  • <h1>{{name}},非常帅</h1>:这是一个标题元素,其中包含一个插值表达式 {{name}}插值表达式是Vue中用于数据绑定的一种方式,它允许你将数据模型中的值渲染到DOM中。

插值表达式 {{name}}

  • {{ }} 是Vue的插值语法,用于将变量的值插值到模板中。
  • name 是一个变量名,它代表Vue实例中的数据属性。在这个例子中,name 应该是一个在Vue实例中定义的属性。

第四步,在script标签中创建Vue实例

JavaScript中创建一个Vue实例,并将其挂载到具有 id="app" 的元素上。

     new Vue({el: '#app',data: {name: '张二强'}});
  • el 属性指定了Vue实例应该挂载的元素。
  • data 属性是一个对象,定义了Vue实例的数据属性。在这个例子中,name 是一个数据属性,它的值将被渲染到模板中。

渲染结果

在这里插入图片描述

完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app"><h1>{{name}},非常帅</h1></div><script src="./node_modules/vue/dist/vue.js"></script><script>let vm = new Vue({el: '#app',data: {name: "张二强"}})</script>
</body>
</html>

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

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

相关文章

【电路笔记】-放大器的频率响应

放大器的频率响应 文章目录 放大器的频率响应1、概述2、定义3、电容器的影响4、低频响应5、高频响应6、总结1、概述 对于任何电子电路来说,放大器的行为都会受到其输入端子上信号频率的影响。 该特性称为频率响应。 频率响应是放大器最重要的特性之一。 在放大器设计的频率范…

凭什么赚钱?

我先说一个朴素的逻辑&#xff0c;赚钱的本质是交换&#xff0c;而交换的底层逻辑是需求。那么现在赚钱的公式就出来了&#xff0c;挖掘需求&#xff0c;找到人群&#xff0c;进行兜售。 而我们普遍意义上的赚钱&#xff0c;就分为两类&#xff0c;体力和脑力。脑力是高纬度的赚…

【C++】深入理解函数重载:C语言与C++的对比

文章目录 前言1. 函数重载&#xff1a;概念与条件1.1 什么是函数重载1.2 函数重载的条件1.3 函数重载的注意点 2. 函数重载的价值2.1 书写函数名方便2.2 类中构造函数的实现2.3 模板的底层实现 3. C语言与C的对比3.1 C语言不支持函数重载的原因3.2 C支持函数重载的原因 4. Linu…

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…

JAVA集合和数组转换

阿里规约 4.【强制】使用集合转数组的方法&#xff0c;必须使用集合的toArray(T[]array)&#xff0c;传入的是类型完全一样的数组&#xff0c;大小就是list.size()。 说明&#xff1a;使用toArray带参方法&#xff0c;入参分配的数组空间不够大时&#xff0c;toArray方法内部将…

机器人开源调度系统OpenTcs6-架构运行分析

系统启动 启动 Kernel&#xff1a;加载核心应用&#xff0c;初始化系统配置和状态。 启动 Plant Overview&#xff1a;加载图形用户界面&#xff0c;初始化模型和用户界面。 模型导入和配置 在 Plant Overview 中导入或创建工厂布局模型。 配置路径、位置和车辆信息。 车辆连…

C++迈向精通:STL设计机制之运算检查(含部分源码解析)

STL设计机制之支持运算检查 文章目录 STL设计机制之支持运算检查__STL_REQUIRES_LessThanComparable_STL_ERROR::__less_than_comparable_requirement_violation STL运算检查方法的特点do{...}while 的优点场景1场景2 __x __x 自己写一个运算检查 单说这个标题可能有点奇怪&am…

基于java的设计模式学习

PS &#xff1a;以作者的亲身来看&#xff0c;这东西对于初学者来说有用但不多&#xff0c;这些东西&#xff0c;更像一种经验的总结&#xff0c;在平时开发当中一般是用不到的&#xff0c;因此站在这个角度上用处不大。 1.工厂模式 1.1 简单工厂模式 我们把new 对象逻辑封装…

【VUE】v-if和v-for的优先级

v-if和v-for v-if 用来显示和隐藏元素 flag为true时&#xff0c;dom元素会被删除达到隐藏效果 <div class"boxIf" v-if"flag"></div>v-for用来进行遍历&#xff0c;可以遍历数字对象数组&#xff0c;会将整个元素遍历指定次数 <!-- 遍…

Provider(6) - Reformat和ClampBufferProvider

ReformatBufferProvider和ClampFloatBufferProvider 简介 ReformatBufferProvider就是用于转换输入和输出的数据format不一致&#xff0c;比如输入是float、输出是int32_t&#xff1b; ClampFloatBufferProvider则是将float类型的音频数据其能量限制在[-3dB&#xff0c;3dB]…

【大数据】JSON文件解析,对其文本聚类/情感分析

目录 引言 JSON&#xff08;JavaScript Object Notation&#xff09; 文本聚类K-means 基本步骤 优点 缺点 实际应用 情感分析 核心任务与应用场景 算法原理与技术 json数据集 情感分析实现 文本聚类实现 引言 JSON&#xff08;JavaScript Object Notation&#…

从系统层面认识Linux及mysql中的多表查询

为什么计算机起始时间是1970年1月1日 为什么计算机起始时间是1970年1月1日-CSDN博客https://blog.csdn.net/csdn_kou/article/details/81535452 date "%Y-%m-%d %H:%M:%S" 查看日期 sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 在数据层面 CPU不…

Nacos Derby 远程命令执行漏洞(QVD-2024-26473)

0x01 产品简介 Nacos 是一个功能强大的服务注册与发现、配置管理平台,为微服务架构和云原生应用提供了重要的基础设施支持。 0x02 漏洞概述 由于Alibaba Nacos部分版本中derby数据库默认可以未授权访问,恶意攻击者利用此漏洞可以未授权执行SQL语句,最终导致任意代码执行。…

GESP CCF C++ 八级认证真题 2024年6月

第 1 题 GESP活动期间&#xff0c;举办方从获胜者ABCDE五个人中选出三个人排成一队升国旗&#xff0c;其中A不能排在队首&#xff0c;请问 有多少种排法&#xff1f; A.24 B.48 C.32 D.12 第 2 题 7进制数235转换成3进制数是&#xff08; &#xff09;。 A. 11121 B. 11…

Ruby 循环

Ruby 循环 在编程中&#xff0c;循环是一种常用的控制结构&#xff0c;它允许我们重复执行一段代码多次。Ruby 作为一种灵活的编程语言&#xff0c;提供了多种循环方法&#xff0c;包括 while、until、for、each 和 loop 等。本文将详细介绍 Ruby 中的循环机制&#xff0c;并通…

OpenWrt安装快速入门指南

在刷新 OpenWrt 固件之前&#xff0c;建议进行以下准备&#xff1a; 1、不要急于安装&#xff0c;慢慢来。如果在安装过程中出现奇怪之处&#xff0c;请先找到答案&#xff0c;然后再继续。 2、准备好设备的精确型号&#xff0c;以便能够选择正确的OpenWrt固件。 3、手上有关…

密码学原理精解【9】

这里写目录标题 迭代密码概述SPN具体算法过程SPN算法基本步骤举例说明注意 轮换-置换网络一、定义与概述二、核心组件三、加密过程四、应用实例五、总结 轮函数理论定义与作用特点与性质应用实例总结 迭代密码理论定义与原理特点与优势应用场景示例发展趋势 AES特点概述一、算法…

第三届智能机械与人机交互技术学术会议(IHCIT 2024)

【北航主办丨本届SPIE独立出版丨已确认ISSN号】 第三届智能机械与人机交互技术学术会议&#xff08;IHCIT 2024&#xff09; 2024 3rd International Conference on Intelligent Mechanical and Human-Computer Interaction Technology 2024年7月27日----中国杭州&#xff0…

083、Python 读二进制文件

在Python中&#xff0c;读取二进制文件使用open()函数&#xff0c;并将模式&#xff08;mode&#xff09;设置为rb&#xff08;r’表示读取&#xff0c;b’表示二进制&#xff09;。这样&#xff0c;可以读取文件内容作为字节&#xff08;bytes&#xff09;对象&#xff0c;而不…

构建之源:深入解析Gradle的settings.gradle文件

标题&#xff1a;构建之源&#xff1a;深入解析Gradle的settings.gradle文件 在Gradle的世界中&#xff0c;settings.gradle文件扮演着至关重要的角色。它是Gradle多项目构建的心脏&#xff0c;负责定义和管理项目结构&#xff0c;包括项目的组织、子模块的包含和项目之间的关…