Vue(就只了解了解)
引入vue.js的cdn
1
| <script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>
|
第一个vue的demo
1 2 3 4 5 6 7 8 9 10 11 12 13
| <div id="app"> {{message}} </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script> <script> var vue = new Vue({ el: "#app", data:{ message: "hello Vue" } }); </script>
|
MVVM
Vue采用MVVM框架,即Model(模型层)、View(视图层)、ViewModel(视图模型对象,是连接view与model的桥梁,可类比控制层)。
在上述demo里我们创建了vue这个对象,可以在页面的控制台中使用vue.message = “xxx”进行动态赋值。
Vue七大属性
el:元素节点
data:用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中
template:设置模板,会替换页面元素,包括占位符
methods:定义方法,页面中的业务逻辑,js方法一般都放置在methods中
render:创建真正的Virtual Dom
computed:计算属性,可类比缓存
watch:
- watch:function(new,old){}
- 监听data中数据的变化
- 两个参数,一个返回新值,一个返回旧值,
基本语法
绑定、判断、循环、监听
1 2 3 4 5 6
| v-bind 绑定 v-if v-else v-else-if v-for=("xxx in xxx") 类比foreach v-on 监听事件
|
双向绑定(v-model)
实时更新表单、单选、下拉框等内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <div id="app"> 输入:<input type="text" v-model="message"> {{message}}
</br>性别单选: <input type="radio" name="sex" value="男" v-model="sex">男 <input type="radio" name="sex" value="女" v-model="sex">女 <p> 性别是:{{sex}} </p>
下拉框: <select v-model="selected"> <option value="" disabled>请选择</option> <option>A</option> <option>B</option> <option>C</option> </select> <span>{{selected}}</span> </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script> <script> var vue = new Vue({ el: "#app", data: { message: "123" , sex: '' , selected: '' } }); </script>
|
Vue组件(props)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <div id="app"> <tang v-for="arr in arrays" v-bind:foreach="arr"></tang> </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script> <script> Vue.component("tang",{ props: ["foreach"] , template: "<li>{{foreach}}</li>" });
var vue = new Vue({ el: "#app" , data: { arrays: ["a","b","c"] } }); </script>
|
Vue.component声明了一个叫tang的组件,然后我们就可以使用tang标签。
vue对象有数组数据,在tang标签中继续for循环遍历数组,遍历出来的数据是arr,我们声明一个foreach的绑定变量来引用arr数据,随后在组件component中用props绑定这个foreach变量并应用它。
props就是组件来传递使用的变量。
Axios异步通信
相关cdn
1
| <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
|
我们在钩子函数mounted()里应用axios,注意返回的数据格式必须与json的数据格式相对应。当然我们要自定义一个json来测试功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <div id="app"> <div>{{info.name}}</div> <div>{{info.address.country}}</div>
<a v-bind:href="info.url">dian ji</a> </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script> var vue = new Vue({ el: '#app' , data(){ return{ info:{ name: null , address: { street: null, city: null, country: null } , url: null } } } , mounted(){ axios.get('data.json').then(response=>(this.info = response.data)); } }); </script>
|
slot插槽
v-bind: 可简写为 : ,通过插槽对组件进行组装以及数据的绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <div id="app"> <list> <list-title slot="list-title" :title="title"></list-title> <list-arrs slot="list-arrs" v-for="arr in arrs" :thing="arr"></list-arrs> </list> </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script> <script> Vue.component("list",{ template: '<div>\ <slot name="list-title"></slot>\ <ul>\ <slot name="list-arrs"></slot>\ </ul>\ </div>' });
Vue.component('list-title',{ props: ['title'], template:'<div>{{title}}</div>' });
Vue.component('list-arrs',{ props: ['thing'], template:'<li>{{thing}}</li>' });
var vue = new Vue({ el: "#app", data:{ title: "datalist", arrs:['tang1','tanmg2','tang9'] }
}); </script>
|
自定义事件内容分发(this.$emit)
使用 this.$emit 传参,可就是绑定我们的自定义事件。这里 @ 即 v-on:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <div id="app"> <list> <list-title slot="list-title" :title="title"></list-title> <list-arrs slot="list-arrs" v-for="(arr,index) in arrs" :thing="arr" :index="index" @remove="removeArr(index)" ></list-arrs> </list> </div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script> <script> Vue.component("list",{ template: '<div>\ <slot name="list-title"></slot>\ <ul>\ <slot name="list-arrs"></slot>\ </ul>\ </div>' });
Vue.component('list-title',{ props: ['title'], template:'<div>{{title}}</div>' });
Vue.component('list-arrs',{ props: ['thing','index'], template:'<li>{{thing}}__{{index}} <button @click="remove">删除</button> </li>', methods:{ remove: function(){ this.$emit('remove'); } } });
var vue = new Vue({ el: "#app", data:{ title: "datalist", arrs:['tang1','tanmg2','tang9'] }, methods:{ removeArr: function(index){ console.log("删除"+this.arrs[index]); this.arrs.splice(index,1); } } }); </script>
|
vue-cli(脚手架)
webpack
模块加载器 & 打包工具
1 2
| npm install webpack -g npm install webpack-cli -g
|
modules/hello.js
1 2 3 4
| exports.sayHello = function () { document.write("<h1>Hello!!</h1>"); }
|
modules/main.js
1 2
| var hello = require("./hello"); hello.sayHello();
|
webpack打包
1 2 3 4 5 6
| module.exports = { entry: './modules/main.js', output: { filename: "./js/bundle.js" } };
|
index页面引用js
1 2 3 4 5 6 7 8 9 10 11 12
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body>
<script src="dist/js/bundle.js"></script>
</body> </html>
|
也就是说webpack类似我们java继承其他类,实现接口这样。打包方便第三方引用代码。
vue-router(官方路由管理器)
1
| npm install vue-router@4
|
首先在项目录里安装router,主要是进行页面跳转。
我们事先写好组件,然后引用对应组件进行页面的跳转。
官网:https://next.router.vuejs.org/introduction.html
小博客:https://www.cnblogs.com/davina123/p/13371333.html
ElementUI
官网:https://element.eleme.cn/#/zh-CN
很类似java导包,这里直接引用别人写好的组件即可
小结
Vue3出了,导致前几年的视频很多命令对不上,正统学习时要找一下时效性强的来学习。