Vue (读音 /vju/,类似于 view)
是中国的大神尤雨溪开发的,为数不多的国人开发的世界顶级开源软件。
是一套用于构建用户界面的渐进式框架 。Vue 被设计为可以自底向上逐层应用。
MVVM响应式编程模型,避免直接操作DOM , 降低DOM操作的复杂性。
M(model):普通的javascript数据对象
V(view):前端展示页面
VM(ViewModel):用于双向绑定数据与页面,对于我们的课程来说,就是vue的实例。
“渐进式框架” 非常简单,就是用你想用或者能用的功能特性,你不想用的部分功能可以先不用。VUE不强求你一次性
所以VUE的适用面很广,你可以用它代替老项目中的JQuery。也可以在新项目启动初期,有限的使用VUE的功能特性,
从而降低上手的成本。
1 DOCTYPE html>
2 <html lang="en">
3
4 <head>
5 <meta charset="UTF‐8">
6 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
7 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
8 <title>Documenttitle>
9 head>
10
11 <body>
12
13 <div id="app">
14 <h1> {{name}} ,非常帅h1>
15 div>
16
17 <script src="./node_modules/vue/dist/vue.js">script>
18
19 <script>
20 //1、vue声明式渲染
21 let vm = new Vue({
22 el: "#app",//绑定元素
23 data: { //封装数据
24 name: "张三"
25 }
26 });
27 script>
28 body>
29
30 html>
1
2 DOCTYPE html>
3 <html lang="en">
4 <head>
5 <meta charset="UTF‐8">
6 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
7 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
8 <title>Documenttitle>
9 head>
10 <body>
11 <div id="app">
12 <div v‐text="message">div>
13 div>
14 body>
15 <script src="https://unpkg.com/vue/dist/vue.js">script>
16 <script>
17 var vm = new Vue({
18 el: '#app',
19 data: {
20 message: "Hello!"
21 },
22 })
23 script>
24 html>
1
2
3 DOCTYPE html>
4 <html lang="en">
5 <head>
6 <meta charset="UTF‐8">
7 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
8 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
9 <title>Documenttitle>
10 head>
11 <body>
12 <div id="app">
13 <div v‐html="message">div>
14 div>
15 body>
16 <script src="https://unpkg.com/vue/dist/vue.js">script>
17 <script>
18 var vm = new Vue({
19 el: '#app',
20 data: {
21 message: "您好,我是徐庶!",
22 }
23 })
24 script>
25 html>
vue提供了v-if和v-show两个指令来控制页面元素的显示和隐藏。我们先通过一段代码来看一下使用两个指令各有什么效果:
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <div>
12 <button>我是添加按钮,我一直在button>
13 div>
14 <div>
15 <button id="show" v‐show="deleteButton">我是删除按钮,我通过v‐show控制显隐button>
16 <button v‐on:click="deleteButton = true">设置显示button>
17 <button v‐on:click="deleteButton = false">设置隐藏button>
18 div>
19 <div>
20 <button id="if" v‐if="editButton">我是修改按钮,我通过v‐if控制显隐button>
21 <button v‐on:click="editButton = true">设置显示button>
22 <button v‐on:click="editButton = false">设置隐藏button>
23 div>
24 div>
25 body>
26 <script src="https://unpkg.com/vue/dist/vue.js">script>
27 <script type="text/javascript">
28 var vm = new Vue({
29 el: '#app',
30 data() {
31 return {
32 deleteButton: true,
33 editButton: true
34 }
35 }
36 })
37 script>
38 html>
上面我们已经了解了vif的使用方法。事实上,vif的条件渲染和JavaScript条件判断语
句中的if、else、else if非常类似。
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <div v‐if="number === 1">
12 A
13 div>
14 <div v‐else‐if="number === 2">
15 B
16 div>
17 <div v‐else>
18 C
19 div>
20 div>
21 body>
22 <script src="https://unpkg.com/vue/dist/vue.js">script>
23 <script type="text/javascript">
24 var vm = new Vue({
25 el: '#app',
26 data() {
27 return {
28 number: 1
29 }
30 }
31 })
32 script>
33 html>
v-for 用于列表的循环渲染。
基本语法:v-for=“item in data”,data 可以是数组或者对象,接下来我们介绍对两种数据类型的循环。
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <ul>
12 <li v‐for="item in music">{{item.name}}li>
13 ul>
14 div>
15 body>
16 <script src="https://unpkg.com/vue/dist/vue.js">script>
17 <script type="text/javascript">
18 var vm = new Vue({
19 el: '#app',
20 data() {
21 return {
22 // 要循环的数组
23 music: [
24 { name: '青花瓷' },
25 { name: '阳光总在风雨后' },
26 { name: '十年' }
27 ]
28 }
29 }
30 })
31 script>
32 html>
33
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <ul>
12 <li v‐for="item in obj">{{item}}li>
13 ul>
14 div>
15 body>
16 <script src="https://unpkg.com/vue/dist/vue.js">script>
17 <script type="text/javascript">
18 var vm = new Vue({
19 el: '#app',
20 data() {
21 return {
22 obj: {
23 name: '句号',
24 age: 18,
25 sex: '男'
26 }
27 }
28 }
29 })
30 script>
31 html>
有时候,我们需要给元素绑定事件,vue 中提供了指令 v-on 来进行事件的绑定。用法:
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <button v‐on:click="hello">hellobutton>
12 div>
13 body>
14 <script src="https://unpkg.com/vue/dist/vue.js">script>
15 <script type="text/javascript">
16 var vm = new Vue({
17 el: '#app',
18 data: {},
19 methods: {
20 hello() {
21 alert('hello')
22 }
23 }
24 })
25 script>
26 html>
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <div v‐bind:title="title">
12 鼠标悬停查看消息!
13 div>
14 <div>
15 <a v‐bind:href="href">图灵学院a>
16 div>
17 <div>
18 <img v‐bind:src="src"/>
19 div>
20 <div>
21 <button v‐bind:disabled="disabled">禁用按钮button>
22 div>
23 div>
24 body>
25 <script src="https://unpkg.com/vue/dist/vue.js">script>
26 <script type="text/javascript">
27 var vm = new Vue({
28 el: '#app',
29 data: {
30 title: "您好,我是徐庶老师,欢迎来到图灵学院!希望你可以在图灵学院学到更多的东西!",
31 href: 'https://www.tulingxueyuan.cn/',
32 src: 'http://img2.mukewang.com/szimg/5df1deec09ba554712000676‐360‐202.png',
33 disabled: true
34 }
35 })
36 script>
37 html>
vue 还提供了指令 v-bind 的简写方式,可以直接通过:属性名的方式。
v-bind:src=“src” <=> :src=“src”
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <div>
12 <label>年龄:label>
13 <input v‐model="age"/>
14 div>
15 <div>当前输入的年龄是: {{age}}div>
16 <button @click="add">加一岁button>
17 <button @click="alertYear">弹出年龄button>
18 div>
19 body>
20 <script src="https://unpkg.com/vue/dist/vue.js">script>
21 <script type="text/javascript">
22 var vm = new Vue({
23 el: '#app',
24 data: {
25 age: 10
26 },
27 methods: {
28 add(){
29 this.age = this.age + 1;
30 },
31 alertYear() {
32 alert(this.age)
33 }
34 }
35 })
36 script>
37 html>
38
组件是 Vue.js 最强大的功能之一,组件可以扩展 HTML 元素,封装可重用的代码。组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树;
在编写组件时,我们需要不断思考如何提高组件的可复用性。
组件是可复用的 Vue 实例, 我们可以把页面中在多个场景中重复使用的部分,抽出为一个组件进行复用。组件大大提高了代码的复用率。
我们可以通过调用 Vue.component 的方式来定义全局组件,它接收两个参数:1. 组件名,2. 组件属性对象。
属性对象:组件的属性对象即为 Vue 的实例对象属性。
全局组件可以在任何其他组件内使用,所以当我们设计的组件,需要在不同地方使用的时候,我们应当注册全局组件。
1 // 注册
2 // 驼峰命名
3 Vue.component('MyComponentName', {/* */})
4 // 短横线命名
5 Vue.component('my‐component‐name', {/* */})
6 ......
7 // 使用
8 <my‐component‐name>my‐component‐name>
9 // 也可以使用自闭和的方式
10 <my‐component‐name />
具体实例:
1
2 DOCTYPE html>
3 <html lang="en">
4 <head>
5 <meta charset="UTF‐8">
6 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
7 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
8 <title>Documenttitle>
9 head>
10 <body>
11 <div id="app">
12 <my‐component>my‐component>
13 <my‐component />
14 div>
15 body>
16 <script src="https://unpkg.com/vue/dist/vue.js">script>
17 <script type="text/javascript">
18 Vue.component('myComponent', {
19 template: 'Hello !'
20 })
21 var vm = new Vue({
22 el: '#app',
23 data() {
24 return {}
25 }
26 })
27 script>
28 html>
代码解释:
JS 代码第 3-5 行,我们注册了一个全局组件 myComponent,并在 html 内使用两种方式引用了该组件。
我们也可以在 Vue 实例选项中注册局部组件,这样组件只能在这个实例中使用。局部组件的注册利用 Vue 实例
的 components 对象属性,以组件名作为 key 值,以属性对象作为 value。由于局部组件只能在当前的 Vue 实例中使用,
所以当我们设计的组件不需要在其他组件内复用时,可以设计为局部组件。
1 //注册
2 components: {
3 'MyComponentName': {
4 template: '<div>Hello !div>'
5 }
6 }
7 ......
8 // 使用
9 <my‐component‐name>my‐component‐name>
10 // 也可以使用自闭和的方式
11 <my‐component‐name />
具体实例:
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <my‐component>my‐component>
12 <my‐component />
13 div>
14 body>
15 <script src="https://unpkg.com/vue/dist/vue.js">script>
16 <script type="text/javascript">
17 var vm = new Vue({
18 el: '#app',
19 components: {
20 'myComponent': {
21 template: 'Hello !'
22 }
23 }
24 })
25 script>
26 html>
我们来看一下官网给的 Vue 生命周期的图:
从上面这幅图中,我们可以看到 vue 生命周期可以分为八个阶段,分别是:
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id = "app">
11 {{ name }}
12 <button @click="updateName">更新button>
13 <button @click="destroy">销毁button>
14 div>
15 body>
16 <script src="https://unpkg.com/vue/dist/vue.js">script>
17 <script type = "text/javascript">
18 var vm = new Vue({
19 el: '#app',
20 data: {
21 name:'hello !'
22 },
23 methods : {
24 updateName() {
25 console.log('准备修改名字啦!')
26 this.name = 'hello 慕课!'
27 },
28 destroy(){
29 vm.$destroy()
30 }
31 },
32 beforeCreate() {
33 // 此时页面数据未初始化
34 console.log('beforeCreate:' + this.name) // beforeCreate: undefined
35 },
36 created() {
37 // 页面数据已经初始化
38 console.log('created:' + this.name) // beforeCreate: hello !
39 },
40 beforeMount() {
41 console.log('beforeMount:' + this.name) // beforeCreate: hello !
42 },
43 mounted() {
44 console.log('mounted:' + this.name) // beforeCreate: hello !
45 },
46 // 点击更新按钮后会先触发 beforeUpdate
47 beforeUpdate() {
48 console.log('beforeUpdate:' + this.name) // beforeCreate: hello 慕课!
49 },
50 updated() {
51 console.log('updated:' + this.name) // updated hello 慕课 !
52 },
53 // 点击销毁按钮后会先触发 beforeDestroy
54 beforeDestroy(){
55 console.log('beforeDestroy: before destroy') // beforeDestroy: before destroy
56 },
57 destroyed(){
58 console.log('destroyed: success') // destroyed: success
59 // 在这之后点击页面 更新 按钮将无任何效果
60 }
61 });
62 script>
63 html>
Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。 — 官方定义VueRouter 是 SPA(单页应用)的路径管理器,它允许我们通过不同的 URL 访问不同的内容。
1 npm install vue‐router
1 DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF‐8">
5 <meta name="viewport" content="width=device‐width, initial‐scale=1.0">
6 <meta http‐equiv="X‐UA‐Compatible" content="ie=edge">
7 <title>Documenttitle>
8 head>
9 <body>
10 <div id="app">
11 <div>
12 <router‐link to="/index">首页router‐link>
13 <router‐link to="/article">文章router‐link>
14 div>
15 <router‐view>router‐view>
16 div>
17 body>
18
19 <script src="https://unpkg.com/vue/dist/vue.js">script>
20 <script src="https://unpkg.com/vue‐router/dist/vue‐router.js">script>
21 <script type="text/javascript">
22
23 const Index = Vue.component('index', {
24 template: 'Hello,欢迎使用慕课网学习 Vue 教程!',
25 })
26
27 const Article = Vue.component('myArticle', {
28 template: `- 1. Vue 计算属性的学习
- 2. React 基础学习
`,
29 })
30
31 const routes = [
32 { path: '/index', component: Index },
33 { path: '/article', component: Article }
34 ]
35
36 const router = new VueRouter({
37 routes: routes
38 })
39
40 var vm = new Vue({
41 el: '#app',
42 router: router,
43 data() {
44 return {}
45 }
46 })
47 script>
48 html>
官网:http://www.axios-js.com/zh-cn/docs/
Axios 是一个基于 promise 的 HTTP 库,可以用在html和 vue、nodejs 中。
执行Get请求:
1 // 上面的请求也可以这样做
2 axios.get('/user', {
3 params: {
4 ID: 12345
5 }
6 })
7 .then(function (response) {
8 console.log(response);
9 })
10 .catch(function (error) {
11 console.log(error);
12 });
执行POST请求
1 axios.post('/user', {
2 firstName: 'Fred',
3 lastName: 'Flintstone'
4 })
5 .then(function (response) {
6 console.log(response);
7 })
8 .catch(function (error) {
9 console.log(error);
10 });
执行多个并发请求
1 function getUserAccount() {
2 return axios.get('/user/12345');
3 }
4
5 function getUserPermissions() {
6 return axios.get('/user/12345/permissions');
7 }
8
9 axios.all([getUserAccount(), getUserPermissions()])
10 .then(axios.spread(function (acct, perms) {
11 // 两个请求现在都执行完成
12 }));
1 vue init webpack 项目名
2 // 确认项目名
3 // 输入项目描述
4 // 作者
5 // 让选择创建方式 默认 回车
6 // 选择是否安装vue‐router y
7 // 是否安装eslint n
8 // unit test n
9 // e2e test n
10 // 选择NPM
11 进行安装....