Vue2_了解核心概念和一个示例工程

news/2025/1/20 11:31:19/文章来源:https://www.cnblogs.com/goicandoit/p/18681031

Vue2_了解核心概念和一个示例工程

写文的目的是为了梳理知识,正如某一位面试官所说:会写并不牛,懂原理才牛

下面开始:

vue 具有较好的可维护性和可测试性

vue 是一个渐进式框架

(请忽略我这灵魂画手😉)

ab651858da6e43f502c15213b3115e1

vue也可以进行页面分割,通过组件的方式

90bc75b2300a9ed31d155e5cb3ba179

Vue 实例挂载方式

下面上一个列表界面

通过 <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> 引入 Vue.js 库

其中 el 是 element 的缩写

并且 通过 el: '#app' 挂载 Vue 实例

这种方法常见用简单的 Vue 应用或者单页面展示

可以 直接操作DOM :通过 el 直接挂载到 DOM 元素,可以直接在 el 中使用 Vue 实例的绑定数据和方法。

下面代码中数据是放在 data 对象中的

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>商品列表</title><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body><div id="app"><h1>商品列表</h1><ul v-if="products.length > 0"><li v-for="product in products" :key="product.id"><strong>{{ product.name }}</strong> - ¥{{ product.price }}</li></ul><p v-else>加载中...</p></div><script>const app = new Vue({el: '#app',data: {products: [] // 商品数据},mounted() {// 组件挂载后,调用获取商品数据的方法this.fetchProducts();},methods: {fetchProducts() {// 模拟从 API 获取商品数据fetch('https://api.myjson.com/bins/74l63') // 这里可以替换为真实的 API URL.then(response => response.json()) // 解析 JSON 数据.then(json => {// 更新 products 数据this.products = json.products;}).catch(error => {console.error('获取商品数据失败:', error);});}}});</script>
</body>
</html>

我们在项目中常用的方法是 通过 new Vue() 创建实例

new Vue({el: '#app',render: h => h(App) // 渲染根组件
})

主要区别总结:

特性 通过 new Vue()render 通过 el: '#app' 挂载 Vue 实例
结构 组件化结构,适合中大型项目 非组件化,适合简单应用
模板 使用 .vue 文件和 render 函数 直接在 HTML 中写模板
应用复杂度 适应复杂的单页面应用 适合快速开发和简单展示
扩展性 易于维护和扩展,支持路由、状态管理 难以扩展,适合简单页面或小项目
组件化 支持完整的组件化,多个 Vue 组件 不支持组件化,整个应用为一个 Vue 实例

何时使用哪种方式?

  • 使用 new Vue()render 的方式:当你开发一个需要组件化的较复杂 Vue 应用时,推荐使用这种方式。它可以帮助你将应用的不同部分拆分成可重用的组件,易于管理和维护。
  • 使用 el: '#app' 的方式:当你只需要展示一些简单的内容或者做一个小型的 Vue 应用时,这种方式更加快速、简洁,适合快速原型设计或者小型项目。

响应式

数据是响应式

比如我们模拟了3个商品,可以直接弹出一个商品

image-20250119212003982

页面也是直接改变的

加入计算属性

image-20250119213454715

整体代码如下所示:

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>商品列表</title><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head><body><div id="app"><h1>商品列表</h1><ul v-if="products.length > 0"><li v-for="product in products" :key="product.id"><strong>{{ product.name }}</strong> - ¥{{ product.price }}</li></ul><p v-else>加载中...</p><h1>商品总数:{{totalProducts}}</h1></div><script>const app = new Vue({el: '#app',data: {products: [] // 商品数据},mounted() {// 组件挂载后,调用获取商品数据的方法this.fetchProducts();},computed: {totalProducts() {// 计算商品总数量return this.products.reduce((sum, product) => sum + product.quantity, 0);}},methods: {fetchProducts() {this.products = [{ id: 1, name: '商品1', price: 100, quantity: 1 },{ id: 2, name: '商品2', price: 200, quantity: 2 },{ id: 3, name: '商品3', price: 300, quantity: 3 }]}}});</script>
</body></html>

vue 的这个插件也可以看内容

image-20250119224706955

再次使用 app.products.pop()

列表同步更新,商品总数也同步更新

我们再加一些交互,通过button添加

        <ul v-if="products.length > 0"><li v-for="product in products" :key="product.id"><strong>{{ product.name }}</strong> - ¥{{ product.price }}<button @click="product.quantity+=1">Add</button></li></ul>
image-20250120104055234

再加一个 input 作为交互

image-20250120104331959
        <ul v-if="products.length > 0"><li v-for="product in products" :key="product.id"><input type="number" v-model.number="product.quantity"><strong>{{ product.name }}</strong> - ¥{{ product.price }}<button @click="product.quantity+=1">Add</button></li></ul>

这里 v-model 用到了.number - 输入字符串转为有效的数字

可以确保绑定的值在双向绑定时总是数字类型,避免类型问题出错

END

本文做了简要的 Vue2 核心概念和示例工程介绍,包括两种 Vue 实例的挂载方式,并对比两者的区别;简单介绍了响应式,包括 data 对象内的数据,使用计算属性,使用 v-model 双向绑定,使用了 button 和 input 做了交互

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

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

相关文章

如何解决FTP连接超时问题?

在使用FTP连接时,如果遇到超时问题,可能是由于网络配置或服务器设置不当导致的。以下是具体步骤:检查FTP端口:确保FTP端口(默认为21)在服务器防火墙中已开放。 检查本地网络:确保本地网络连接正常,尝试更换网络环境后重新连接。 使用替代FTP地址:如果使用的是特定的FT…

如何下载文件到电脑桌面?

将文件从远程服务器下载到本地电脑桌面的操作看似简单,但对于初次接触此类任务的朋友来说,仍需掌握一些基本技巧。下面我们将详细介绍几种常用的下载方法,帮助您顺利完成操作。 方法一:通过FTP客户端下载 FTP(文件传输协议)是一种广泛应用于互联网上的标准协议,用于在客…

网站登录无响应,如何排查和解决?

您好,当您在尝试登录网站时遇到无响应的情况,这可能是由多种因素引起的。为了帮助您更有效地解决问题,我们将从以下几个方面进行详细分析,并提供相应的解决方案。 1. 服务器状态检查 首先,确保您的云服务器处于正常运行状态。服务器的意外重启或负载过高都可能导致网站无法…

如何解决虚拟主机上的数据库导入失败问题?

当您在虚拟主机上尝试导入数据库时遇到失败,这通常是由几个常见原因造成的。为了帮助您顺利解决问题,我们将从以下几个角度出发,为您提供详细的解决方案。 1. 确认数据库文件格式 首先,确保您要导入的SQL文件是正确的格式,并且与目标数据库版本兼容。不同版本的MySQL/Mari…

如何处理服务器遭受DDoS攻击后被封禁的情况?

当服务器遭遇大规模DDoS攻击并因此被封禁时,用户将面临严重的访问障碍。为了解决这一问题,您可以参考以下详细的解决方案:评估当前状况:首先明确攻击的具体情况,包括流量大小、持续时间以及受影响的服务范围。根据服务商提供的信息,了解封禁政策及其解除条件。一般情况下…

服务器升级配置后无法启动的原因及解决办法

在对服务器进行配置升级后,如果遇到无法启动的情况,可能是由以下几个方面的原因造成的:磁盘分区问题:某些情况下,升级过程中可能会出现磁盘分区丢失或损坏的现象。这会导致系统无法找到根文件系统,从而无法正常启动。此时,可以通过进入单用户模式来修复这个问题。具体做…

虚拟主机能否新增多个数据库及其管理方式

关于虚拟主机是否支持新增多个数据库的问题,答案是可以实现的,但具体实施方式取决于所选用的服务商和套餐类型。以下是几种常见的解决方案及其优缺点分析:单独购买额外数据库实例:许多虚拟主机服务商允许用户单独购买MySQL或其他类型的数据库实例。每个实例都是独立存在的,…

微擎程序安装后报错缺少ixed.5.6.win

您好,针对您提到的微擎程序安装后报错缺少ixed.5.6.win的问题,我们进行了详细的分析。这个错误通常意味着您的PHP环境中缺少SourceGuardian解密器,而微擎程序依赖于该解密器来运行加密后的代码。 为了解决这个问题,建议您按照以下步骤进行操作:下载并安装SourceGuardian解…

服务器PHP版本过低,如何升级?

您好!根据您的描述,您当前的服务器运行的是PHP 5.2.17p1版本,但您的应用程序要求最低版本为PHP 5.6.20。为了确保您的应用程序能够正常运行并获得更好的性能和安全性,建议您尽快将PHP版本升级到5.6.20或更高版本。 升级步骤如下:备份现有环境:在进行任何升级操作之前,请…

如何解决数据库版本升级后的兼容性问题?

数据库版本升级后,可能会遇到兼容性问题,导致应用程序无法正常工作。为了确保升级过程顺利进行,并避免后续问题,您可以按照以下步骤操作:备份现有数据在进行任何升级操作之前,务必备份现有数据。备份不仅是防止数据丢失的重要手段,也是在出现问题时快速恢复的有效方式。…

如何安全地删除虚拟主机中存在的畸形文件?

问题描述: 用户在虚拟主机中遇到了无法删除的畸形文件,这可能是由于文件名包含特殊字符或其他异常情况造成的。此类文件的存在可能会影响服务器性能或引发其他潜在风险,因此需要尽快清除。 解决方案: 要安全地删除虚拟主机中存在的畸形文件,您可以按照以下步骤操作:评估文…

如何高效地修改PHP网站模板以适应不同的业务需求

问题描述: 用户希望了解如何高效地修改PHP网站模板,使其能够更好地适应不同的业务需求。他们想知道有哪些技巧和工具可以帮助简化这个过程,同时确保修改后的模板仍然保持良好的性能和兼容性。 回答: 修改PHP网站模板是一项常见但又充满挑战的任务,尤其是在面对多样化业务需…