主要学习了MVC和MVVM的区别、学习Vue基本的代码结构、基本指令: 差值表达式, v-cloak, v-text, v-html, v-bind(缩写:), v-on(缩写@), v-model, v-for, v-if, v-show、el 指定控制的区域 data 是对象,指定了控制区域内要用到的数据,methods 虽然带s后缀,但是个对象,这里可以放自定义方法、在vm示例中,如果要访问data上数据,或者访问methods中方法,必须带this、在v-for 注意key属性(接受string、number)、v-model 只能运用到表单元素、Vue中绑定样式2中方式 v-bind:class,v-model:style、v-if和v-show使用和特点等等。
梳理一下:
1.MVC和MVVM的区别
2.学习Vue基本的代码结构
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
<script src="./lib/vue.js"></script>
</head>
<body>
<!--将来 new这个Vue实例控制这个元素所有内容
Vue实例所控制的这个元素区域,就是我们的 V -->
<div id="app">
<p>{{ msg }}</p>
</div>
<script>
//创建实例
//当我们导入包之后,在浏览器内存中,就多了一个Vue构造函数
//我们New出来的这个vm对象,就是我们MVVM中的VM调度者
var vm = new Vue({
el: '#app', //表示当前我们New这个Vue实例,要控制页面哪个区域
data:{
//data 属性中,存放的是el中需要的数据
msg: 'Vue学习' //通过Vue提供的指令,很方便把数据渲染到页面上,程序员不在手动操作DOM元素[前端框架Vue之类的框架,不提倡我们手动操作DOM 元素]
}
//这里的data就是MVVM的M,专门保存每个页面的数据的
})
</script>
</body>
</html>
3.基本指令: 差值表达式, v-cloak, v-text, v-html, v-bind(缩写:), v-on(缩写@), v-model, v-for, v-if, v-show
- 差值表达式:
<span>Message:{{msg}}</span> - v-cloak: 当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码。我们可以使用 v-cloak 指令来解决这一问题。
<p v-cloak>{{msg}}</p>使用 v-cloak能够解决插值表达式闪烁问题,需要加[v-cloak]{display: none;} - v-text:
<h4 v-text="msg"></h4> - v-html: 可以输出html标签,
<div v-html="msg2"></div>,msg2: '<h1>这是H1标签</h1>', - v-bind(缩写:): 单向数据绑定
<input type="button" value="按钮" :title="mytitle + ' 123'" v-on:click="alert">,mytitle: '定义的title' - v-on(缩写@): 用来绑定事件的,
<input type="button" value="按钮" v-on:click="show">,methods:{show: function(){alert('yes')} } - v-model: 双向数据绑定,一般用于用于表单元素
-
v-for:遍历循环用的,可以放普通数组,对象数组,对象和数字。`<p v-for="(user,i) in list">索引值:{{i}}, 用户ID:{{user.id}}, 用户名称:{{user.name}}</p>`,`list:[{id:1,name:"a"},{id:2,name:"b"}, {id:3,name:"c"},{id:4,name:"d"}, ]` -
v-if, v-show: 显示和隐藏元素,`<h3 v-if="flag">这是用v-if控制的元素</h3>`,`<h3 v-show="flag">这是用v-show控制的元素</h3>`
4.事件修饰符 .stop, .self, .prevent, .capture, once
- .stop: 阻止冒泡事件。
- .prevet: 使用.prevet 阻止默认事件
- .capture: 实现捕获触发事件的机制(从外到里捕获事件)
- .self: 实现只有点击当期元素,才会触发事件函数
- .once: 事件只触发一次处理函数 .prevent.once 顺序无所谓
- 使用.stop 与.self的区别: .self只会阻止自己身上的冒泡的行为触发,不会阻止别人的触发
<!--使用.stop 阻止冒泡-->
<div class="outer" @click="div2Handler">
<div class="inner" @click="divHandler">
<input type="button" value="点击" @click.stop="btnHandler">
</div>
</div>
<!--使用 .self 阻止冒泡-->
<div class="outer" @click="div2Handler">
<div class="inner" @click.self="divHandler">
<input type="button" value="点击" @click="btnHandler">
</div>
</div>
5.el 指定控制的区域 data 是对象,指定了控制区域内要用到的数据,methods 虽然带s后缀,但是个对象,这里可以放自定义方法
<div id="app">
<input type="text" v-model="n1">
<select v-model="opt">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" v-model="n2">
<input type="button" value="=" @click="calc">
<input type="text" v-model="result">
</div>
<script>
var vm = new Vue({
el: '#app',
data:{
n1: 0,
n2: 0,
result: 0,
opt:'+'
},
methods:{
calc(){//计算器算数的方法
//逻辑:
//拿到n1,opt,n2值,this.result值计算
var codeStr = 'parseInt(this.n1) ' + this.opt + ' parseInt(this.n2)'
this.result= eval(codeStr)
}
}
})
</script>
6.在vm示例中,如果要访问data上数据,或者访问methods中方法,必须带this

7.在v-for 注意key属性(接受string、number)
在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果v-for有问题,必须要在使用v-for的同时,需要指定唯一的字符串/数字 类型 :key 值
key 在使用的时候,必须使用v-bind属性绑定的形式,指定key值
v-for循环的时候,只能用number或string
<div id="app">
<div>
<label>ID:
<input type="text" v-model="id">
</label>
<label>name:
<input type="text" v-model="name">
</label>
<input type="button" value="添加" @click="add1">
</div>
<!--v-for循环的时候,只能用number或string-->
<!--key 在使用的时候,必须使用v-bind属性绑定的形式,指定key值-->
<!--在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果v-for有问题,必须要在使用v-for的同时,需要指定唯一的字符串/数字 类型 :key 值-->
<p v-for="item in list" :key="item.id">
<input type="checkbox">
ID: {{item.id}} , name: {{item.name}}
</p>
</div>
<script>
var vm = new Vue({
el: '#app',
data:{
id:'',
name:'',
list:[
{id:1,name: 'a'},
{id:2,name: 'b'},
{id:3,name: 'c'},
{id:4,name: 'd'},
{id:5,name: 'e'}
]
},
methods:{
add(){//添加
this.list.push({id: this.id,name: this.name})
},
add1(){//添加
this.list.unshift
({id: this.id,name: this.name})
}
}
})
</script>
8.v-model 只能运用到表单元素

9.Vue中绑定样式2中方式 v-bind:class,v-model:style
:class
- 数组:
<h1 :class="['red','thin']">这是H1</h1> - 三元表达式:
<h1 :class="['red','thin',flag?'active':'']">这是H1</h1> - 数组使用对象代替三元表达式,提高代码的可读性:
<h1 :class="['red','thin',{'active':flag} ]">这是H1</h1> - 对象:
<h1 :class="{red:false, thin: true, italic:true, active:false}">这是H1</h1> - 直接指向:
<h1 :class="classobj">这是H1</h1>
<script>
var vm = new Vue({
el: '#app',
data:{
flag : true,
classobj: {red:false, thin: true, italic:true, active:false}
},
methods:{
}
})
</script>
:style
对象就是无序键值对的集合:<h1 :style="[styleobj,styleobj2]">这是H1</h1>
<script>
var vm = new Vue({
el: '#app',
data:{
styleobj : { color:'red', 'font-weight':100 },
styleobj2 : { 'font-style': 'italic' }
},
methods:{
}
})
</script>
10.v-if和v-show使用和特点
- v-if 的特点:每次都会重新删除或者创建元素; v-show的特点: 每次不会进行DOM元素的删除和创建的操作,只是切换了元素的display:none
- v-if 有较高的切换性能消耗,v-show有较高的初始渲染消耗
- 如果元素涉及到频繁的切换,最好不要用v-if,用v-show; 如果元素可能永远不会被显示出来的话,则推荐v-if

