1.Vue是一个轻巧、高性能、可组件化的MVVM库,是一个构建数据驱动的Web界面的库。css
2.Vue是一套构建用户界面的渐进式框架,与其它框架不一样的是,Vue采用自底向上增量开发的设计。Vue的核心只关注图层。html
3.Vue可驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。vue
1.轻量级的框架git
2.双向数据绑定github
3.指令npm
4.插件化数组
View是视图层,HTML显示页面;缓存
ViewModel是业务逻辑层(一切js可视业务逻辑,如表单按钮提交,自定义事件的注册和处理逻辑都在viewmodel里面负责监控两边的数据);服务器
Model是数据层,对数据的处理(增删改查) app
//--------HTML-------- <div id = 'app'> {{msg}} </div> //--------JavaScript-------- var app = new Vue({ el:'#app', data:{ msg:'开始学习啦' } })
1.el即element,用于指定页面中已存在的DOM元素来挂载Vue实例,能够是标签,也能够是css语法,经常使用就是ID。
2.datas声明应用内须要双向绑定的数据,一般全部要用到的数据都在data内声明一下,以避免数据散落在业务逻辑中形成难以维护。也能够指向一个已有的变量。
3.当挂载成功,能够经过app.$el / app.$data 来访问vue实例的属性(访问vue实例的属性都用$开头)
4.Vue自己也代理了data里面的全部属性,能够直接经过app.msg进行访问
mounted----当编译好的HTML被挂载到对应的位置,这个操做完成后触发
updated----当data中的数据改变,而且虚拟DOM从新渲染完成后触发
destroyed----Vue 实例销毁后调用。调用后,Vue 实例指示的全部东西都会解绑定,全部的事件监听器会被移除,全部的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
钩子的this 指向调用它的实例
//--------HTML-------- <div id = 'app'> {{msg}} </div> //--------JavaScript-------- var app = new Vue({ el: '#app', data: { msg: '开始学习啦', }, created() { alert('vue实例建立完成,可是还未挂载') }, mounted() { alert('vue实例建立完成,已经挂载') } })
注:
父对象与子对象钩子执行顺序:
先生成父对象;
再生成子对象;
子对象挂载到父对象上;
父对象挂载到页面上。
语法:{{}}
<div id='app'> {{6+6*3}} --- 进行简单的运算 {{6>3?Y:N}} --- 三元运算符 {{if(6>3){}}} --- 报错,文本插值不能是表达式的形式,只支持单个表达式 {{var a = 1}} --- 报错,var a ; a=1 ,这是个语句 </div>
{{msg|过滤器名称}}
{{data|filter1|filter2}}
{{data|filter1(11,22)}}中的第一个参数和第二个参数,分别对应过滤器的第二个参数和第三个参数,第一个参数始终是要过滤的那个数据.
例1:
<script src="https://unpkg.com/vue"></script>
<div id="app">
{{num}}
</div>
new Vue({
el: '#app', data: { text: '123,456,789' }, computed: { num() { return this.text.split(',').reverse().join(',') } } })
只要其中任一数据变化,计算属性就会执行,视图也会同步更新.
例2:展现两个bag中的物品总价
<div id="app">
{{prices}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
new Vue ({ el:'#app', data:{ bag1:[{name:'a',price:100,count:5},{name:'b',price:200,count:3}], bag2:[{name:'c',price:300,count:2},{name:'d',price:600,count:8}] }, computed:{ prices(){ var prices = 0 for(var i = 0;i<this.bag1.length;i++){ prices+=this.bag1[i].price*this.bag1[i].count } for(var j = 0;j<this.bag2.length;j++){ prices+=this.bag2[j].price*this.bag2[j].count } return prices } } }) </script>
每个计算属性都包含了一个getter和setter,计算属性默认都是getter(例1 例2都是getter)
例3:使用getter和setter
<body>
<div id="app">
{{fullName}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
var ad = new Vue({ el: '#app', data: { firstName: 'xiao', lastName: 'bai' }, computed: { fullName: { get() { return this.firstName + ' ' + this.lastName }, set(newValue) { var names = newValue.split(',') //分隔为数组 this.firstName = names[0] this.lastName = names[1] } } } }) </script> </body>
*计算属性能够依赖其它计算属性
*计算属性能够依赖当前Vue实例的数据,还能够依赖多个Vue实例的数据
调用 methods 里的方法也能够与计算属性起到一样的做用。计算属性computed具备缓存,而methods无缓存。
页面中的方法: 若是是调用方法,只要页面从新渲染。方法就会从新执行,不须要渲染,则不须要从新执行。
计算属性:无论渲染不渲染,只要计算属性依赖的数据未发生变化,就永远不变。
watch方法--观察Vue实例上的数据变更,只要指定的数据改变就会执行预约的函数
例:
<div id="app"> {{msg}}<br> 是否改变?{{change}} <button @click='changeIt'>是时候改变了</button> </div>
new Vue({ el: '#app', data: { msg: '一寸光阴一寸金', change: 'NO' }, watch: { //只要msg改变,这个方法就会执行 msg(val, oldval) { this.change = 'YES' } }, methods: { changeIt() { this.msg = '寸金难买寸光阴' } } })
---> 键是类名,值是布尔值,值须要定义在data中 {类名,布尔值}
例:
<style> .draw1 { background-color: skyblue; } .draw2 { color: red } </style> <div id="app"> <div :class='{draw1:style1,draw2:style2}'>对象语法</div> </div>
new Vue({ el: '#app', data: { style1: true, style2: true } })
计算属性表示:按钮背景颜色切换
<style> .draw1 { background-color: skyblue; } .draw2 { background-color: yellow; } </style> <div id="app"> <input type="button" value='点击' :class='drawing' @click='clickChange'> </div>
new Vue({ el: '#app', data: { style1: false, style2: true }, computed: { drawing() { return { draw1: this.style1, draw2: this.style2 } } }, methods: { clickChange() { if (this.style1 === false && this.style2 === true) { this.style1 = true this.style2 = false } else { this.style1 = false this.style2 = true } } } })
[对应类名,对应类名],类名在data中体现
例:
<style> .draw1 { background-color: skyblue; } .draw2 { color: red; } </style> <div id="app"> <div :class='[style1,style2]'>数组语法</div> </div>
new Vue({ el: '#app', data: { style1: 'draw1', style2: 'draw2' } })
或者
"['类名','类名']"
<div id="app"> <div :class="['draw1','draw2']">数组语法</div> </div>
<style> .draw1 { background: skyblue; } .draw2 { color: red; } </style> <div id="app"> <div :class='[{draw1 : isActive},style2]'>绑定class数组方式</div> </div> <script src="https://unpkg.com/vue"></script> <script> new Vue({ el: '#app', data: { isActive: true, style1: 'draw1', style2: 'draw2' } }) </script>
{style属性值,对应的值} 值在data中体现
<div id="app"> <div :style="{'color':color,'fontSize':fontSize+'px'}">绑定内联</div> </div>
new Vue({ el: '#app', data: { color: 'red', fontSize: 28 } })
!!注意!!
vue中只要是大写字母,都会转成-加小写字母
如:
fontSize -> font-size
待补充待补充待补充......