Vue
- 一套用于构建用户界面的渐进式 JavaScript框架,全称是Vue.js或者Vuejs
- 提供了一套声明式的、组件化的编程模型
国内外三大框架:Vue、React、Angular
学好Vue是在国内前端市场立足的基础,React是高薪/国外找工作的基础
安装和使用
- 方式一:在页面中通过CDN的方式来引入
- 方式二:下载Vue的js文件,并且自己手动引入
- 方式三:通过npm包管理工具安装使用它
- 方式四:直接通过Vue CLI创建项目,并且使用它
通过CDN引入vue
若不考虑版本控制、缓存策略和稳定性,可以直接使用
javascript
<script src="https://unpkg.com/vue@3"></script>若使用带具体版本的路径(安全性较高)
javascript
<script src="https://unpkg.com/vue@3.4.21/dist/vue.global.js"></script>具体范例
javascript
<!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>
<h2>Hello this is an example</h2>
<p>jsut a content</p>
<div id="一个可挂载的容器"></div>
<!--CDN地址-->
<script src="https://unpkg.com/vue@3"></script>
<script>
//使用Vue
const app = Vue.createApp({
template: `<h2>Hello world</h2>`
})
//mount=挂载
app.mount("#一个可挂载的容器")
</script>
</body>
</html>通过本地引入vue
可以先创建一个lib文件夹,然后在lib文件夹中创建文件vue.js,再在这个文件中复制粘贴刚刚cdn地址中的所有内容,然后在需要引入vue的html文件中就可以通过<script src="./lib/vue.js"></script>实现本地引入啦!
如下:
javascript
<!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"></div>
<script src="./lib/vue.js"></script>
<script>
//1.创建app
const app = Vue.createApp({
template: `<h2>Hello world</h2>`
})
//2.挂载app
app.mount("#app")
</script>
</body>
</html>Vue的基本语法
动态数据
在template中可以使用插值语法,英文moustache 此时需要在Vue.createApp()函数返回的这个对象中新添加一个data属性,这个属性只能返回一个函数,我们可以使用的就是这个函数的返回值 例子如下:
javascript
<body>
<div id="app"></div>
<script src="./lib/vue.js"></script>
<script>
const app = Vue.createApp({
template: `<h2>{{title}}</h2>`,
data: function() {
return {
title: 'Hello world!'
}
}
})
app.mount('#app')
</script>
</body>列表数据
在实际开发中我们拿到的数据往往是列表,这时我们用到的依然是data中函数的返回值 然后可以在template中使用<ul><li v-for="item in 某list"></li></ul> 具体如下:
javascript
<body>
<div id="app"></div>
<script src="./lib/vue.js"></script>
<script>
const app = Vue.createApp({
template: `
<h2>影视列表</h2>
<ul>
<li v-for="item in movies">{{item}}</li>
</ul>
`,
data: function() {
return {
movies: ['爱乐之城', '恶作剧之吻', '花束般的恋爱']
}
}
})
app.mount('#app')
</script>
</body>计数器功能
- methods语法
<button @click="methods中某属性"></button>
具体如下:
javascript
<!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"></div>
<script src="./lib/vue.js"></script>
<script>
const app = Vue.createApp({
template: `
<h2>当前计数:{{counter}}</h2>
<button @click='plus'>+1</button>
<button @click='minus'>-1</button>
`,
data: function() {
return {
counter: 0
}
},
methods: {
plus: function() {
this.counter++
},
minus: function() {
this.counter--
}
}
})
app.mount('#app')
</script>
</body>
</html>可以删掉Vue.createApp中的template属性,因为在template中编写html有一点麻烦
所以可以作此重构:
javascript
<body>
<div id="app">
<h2>当前计数:{{counter}}</h2>
<button @click='plus'>+1</button>
<button @click='minus'>-1</button>
</div>
<script src="./lib/vue.js"></script>
<script>
const app = Vue.createApp({
data: function() {
return {
counter: 0
}
},
methods: {
plus: function() {
this.counter++
},
minus: function() {
this.counter--
}
}
})
app.mount('#app')
</script>
</body>- 当Vue.createApp中没有template属性时,就可以将挂载的容器与data和methods联系起来
- 当Vue.createApp中有template属性时,默认将挂载的容器内容替换为template中内容
- 注意这里是将原本template中的内容放入了所挂载的app容器当中,如果不在app挂载的容器中的话,是无法将此内容与data和methods联系起来的
声明式和命令式
命令时编程关注的是“how to do”,自己完成整个how的过程
- 原生开发属于命令式编程,早期的js和jQuery开发都是通过命令式
声明式编程关注的是“what to do”,框架(机器)完成“how”的过程
在vue的实现过程中,我们是如何操作的呢?
- 在createApp传入的对象中声明需要的内容,模板template、数据data、方法methods
- 这样的编写代码的过程称为声明式编程
- 目前vue、react、angular、小程序都是使用声明式编程
options-api
options-data属性
- 这个属性必须是一个函数,并且这个函数必须返回一个对象
- 这个对象会被vue劫持并渲染到页面
- 被劫持的对象如果发生了变化都会被vue自动渲染到页面上
options-methods属性
methods属性是一个对象,通常我们会在这个对象中定义很多的方法
- 这些犯法可以被绑定到模板中
- 在该方法中,我们可以使用this关键字来直接访问到data中返回的对象的属性
如果使用箭头函数定义methods,
this不会绑定到组件实例(箭头函数继承外层作用域的this):
javascript
methods: {
// ❌ 错误:箭头函数的 this 指向外层(可能是 undefined 或 window)
badExample: () => {
console.log(this.message); // 输出 undefined
},
// ✅ 正确:普通函数
goodExample() {
console.log(this.message); // 正常访问
}
//或者
goodExample: function() {
console.log(this.message);
}
}其他属性
- 这里还可以定义很多其他的属性
- 比如props、computed、watch、emits、setup等等
- 也包括很多的生命周期函数
