Vue2_了解核心概念和一个示例工程
Vue2_了解核心概念和一个示例工程
写文的目的是为了梳理知识,正如某一位面试官所说:会写并不牛,懂原理才牛
下面开始:
vue 具有较好的可维护性和可测试性
vue 是一个渐进式框架
Vue 被设计为可以自底向上逐层应用,如下图所示
(请忽略我这灵魂画手😉)

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

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个商品,可以直接弹出一个商品
使用命令 app.products.pop()
,注意这里的 app 指的是 const app
那创建的 Vue 实例对象

页面也是直接改变的
加入计算属性

整体代码如下所示:
<!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 的这个插件也可以看内容

再次使用 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>

再加一个 input 作为交互

<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 做了交互
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?