Vue 是什么?#
根据 Vue.js 官网 1 的定义:
Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。
创建一个 Vue 应用#
简单来说,Vue 可以理解为一个封装好的 js 库,可以直接在项目中引用。
引用 Vue 的方式有四种:
- 在页面中通过 CDN 的方式来引用 Vue;
<div id="app"></div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
template: `Hello Vue!`,
})
app.mount('#app')
</script>
- 下载 Vue 的 JavaScript 文件,并在项目中手动引用 Vue;
<div id="app"></div>
// 假设将vue源码写入project/js/vue.js之中
<script src="../lib/vue.js"></script>
<script>
const app = Vue.createApp({
template: `Hello Vue!`,
})
app.mount('#app')
</script>
- 通过 npm 包管理工具安装引用 Vue;
npm init vue@latest - 直接通过 Vue CLI 创建项目,并且引用 Vue;
CLI 是 Command-Line Interface, 意为命令行界面。通过 CLI 选择项目的配置和创建项目,Vue CLI 已经内置了 webpack 相关的配置,不需要从零来配置。
全局安装Vue CLI: npm install @vue/cli -g
升级Vue CLI: npm update @vue/cli -g
创建项目: Vue create 项目的名称
体验 Vue 核心功能#
Vue 最显著的特点就是响应式数据驱动,即 View 和 Model 可以双向绑定。当用户更新 View(Model)时,Model(View)也可以随之自动更新,而无需进行额外的 Dom 操作。
<div id="app"></div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
const app = Vue.createApp({
template: `<input v-model="count">
<button v-on:click="addCount">
框内数字是{{count}},点击增加
</button>`,
data: function () {
return {
count: 0,
}
},
methods: {
addCount: function () {
this.count++
},
},
})
app.mount('#app')
</script>
template 属性是一段字符串,可以被解析成 html 文本,并挂载到对应的选择器上。为了方便,也可以直接将 html 文本写在对应选择器内。
Vue 常用 options api#
data#
data 属性是一个函数,该函数需要返回一个对象。该对象会被 Vue 的响应式系统劫持,之后对该对象的修改或者访问都会在劫持中被处理。
methods#
methods 属性是一个对象,该对象中可以定义很多方法并绑定到模板中。method 属性内定义的方法可以使用 this 关键字访问 data 函数中返回的对象的属性。
computed#
在开发中,时常遇到处理复杂数据的场景,较为直观的处理办法时利用插值语法和表达式直接处理或者在 method 中进行处理。但实际上,在 Vue 中任何包含响应式数据的复杂逻辑,都应该使用计算属性。
computed 属性是一个对象,它的使用方法和 methods 属性很像,但又不尽相同。method 多次使用方法的时没有缓存,需要多次计算,而计算属性是有缓存,且调用方法时不需要加()。
watch#
watch 属性是一个对象,可以用来侦听 data 属性里的数据变化。watch 属性内的方法默认有两个参数,newValue 和 oldValue。默认情况下,watch 只是在侦听对象的引用变化,对于内部属性的变化是不会做出响应的。侦听对象内部属性需要用选项 deep 进行更深层的侦听或者直接侦听对应属性变化。另外一个属性 immediate,是希望一开始的就会立即执行一次。
Object: {
handler(newValue, oldValue) {
console.log("侦听到Object改变:", newValue, oldValue)
console.log(newValue === oldValue)
},
// 监听器选项:
// info进行深度监听
deep: true,
// 第一次渲染直接执行一次监听器
immediate: true
},
"Object.value": function(newValue, oldValue) {
console.log("Object.value发生改变:", newValue, oldValue)
}