1. 单向数据绑定:将Model绑定到View上,当通过JavaScript代码改变了Model时,View就会自动刷新。不需要进行额外的DOM操作就可以实现视图和模型的联动
a. 数据只保存一份
b. data—->DOM
(1)插值表达式:{{ 表达式 }},将表达式的值在View中显示出来
(2)v-bind:将标签的属性绑定到指定的变量上。简写方式: 属性名=“变量名”
2. 双向数据绑定:是Vue的核心特征之一。将Model绑定到View上,同时将View和Model进行绑定。即当Model的数据发生改变时,View会自动更新;当View的数据发生改变时,Model的数据也会更新。
强调:在Vue中只有表单元素才能实现双向绑定(input、textarea、select),实现指令是v-model
(1)文本框(text’的绑定:和普通的变量进行绑定
(2)复选框(checkbox)的绑定:绑定的变量必须是数组
(3)单选框(radio)的绑定:绑定普通的变量
(4)下拉列表(select)的绑定:当下拉列表为单选时,绑定的变量为普通变量;当下拉列表为多选时,绑定的变量自动转换为数组
3. 值绑定的时机(数据同步的时机):v-model指令可以实现Model和View的数据同步
(1).lazy(懒加载):在input失去焦点或按下回车键时才进行更新
<label>
用户名:<input type="text" v-model.lazy="userName">
</label>
(2).number:将输入的数据转换成Number类型。在input中输入的虽然是数字,但实际是string,为了将字符串转换为数字,加上该修饰符实现自动转换
<label>
年龄:<input type="number" v-model.number="userAge">
</label>
<p>年龄:{{userAge}},数据类型:{{typeof(userAge)}}</p>
(3).trim:会自动过滤掉输入的首尾空格
<label>
用户名:<input type="text" v-model.trim="userName">
</label>
通过v-on指令绑定,v-on:原生的事件名(@原生事件名)
1. 方法处理器方式:v-on:原生事件名 = 函数名
<script src="../js/vue.js"></script>
<body>
<div id="app">
<p>{{msg}}</p>
<!-- <button @click="changeMsg">修改</button> -->
<button v-on:click="changeMsg()">修改</button>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'Hello World!'
},
methods:{
changeMsg(){
this.msg='曲江池'
}
}
})
</script>
</body>
2. 内联语句处理器方式:本质是内联了javascript语句
<script src="../js/vue.js"></script>
<body>
<div id="app">
<p>{{msg}}</p>
<button v-on:click="changeMsg('大雁塔')">修改</button>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'Hello World!'
},
methods:{
changeMsg(info){
this.msg=info
}
}
})
</script>
</body>
3. 在内联语句中访问原生的DOM事件
<script src="../js/vue.js"></script>
<body>
<div id="app">
<p>{{msg}}</p>
<!-- <button v-on:click="changeMsg('大雁塔')">修改</button> -->
<br><br>
<a href="http://www.baidu.com" v-on:click="say($event)">百度一下</a>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'Hello World!'
},
methods:{
changeMsg(){
this.msg='曲江池'
},
// say(event){
// event.preventDefault()
// },
say:function(event){
event.preventDefault()
}
}
})
</script>
</body>
4. 事件绑定中的修饰符
(1).prevent :调用preventDefault()。阻止链接打开URL
<a href="http://www.bilibili.com" v-on:click.prevent>bilibili</a>
(2).stop :调用stopPropagation()。阻止事件传播(阻止事件冒泡)
(3)键值修饰符:在监听键盘事件时,需要知道键的keyCode,记忆不方便,可以通过修饰符来记录键值
enter、tab、delete、esc、space、up、down、left、right
<script src="../js/vue.js"></script>
<body>
<div id="app">
<button v-on:keyup.up="say">提交</button>
</div>
<script>
const vm = new Vue({
el:'#app',
data:{
msg:'键盘修饰符',
},
methods:{
say(){
alert(this.msg)
}
}
})
</script>
</body>
1. 对象语法:给v-bind:class传递一个对象,来动态地改变class属性值
<script src="../js/vue.js"></script>
<style>
div {
width: 100px;
height: 100px;
}
.class1 {
background-color: #ff0;
}
.class2 {
background-color: #f00;
}
</style>
<body>
<div id="app" v-bind:class="colorName" v-on:click="changeColor"></div>
<script>
const vm = new Vue({
el: '#app',
data:{
colorName:{
class1:true,
class2:false
}
},
methods: {
changeColor() {
this.colorName.class1 = !this.colorName.class1
this.colorName.class2 = !this.colorName.class2
}
}
})
</script>
</body>
2. 数组语法:可以把一个数组传给v-bind:class,以应用一个class列表
<script src="../js/vue.js"></script>
<style>
div {
width: 100px;
height: 100px;
}
.class1 {
background-color: #ff0;
}
.class2 {
background-color: #f00;
}
</style>
<body>
<div id="app" v-bind:class="[c1,c2]" v-on:click="changeColor"></div>
<script>
const vm = new Vue({
el: '#app',
data: {
c1: 'class1',
c2: '',
},
methods: {
changeColor() {
this.c1 = (this.c1 == '' ? 'class1' : '')
this.c2 = (this.c2 == '' ? 'class2' : '')
}
}
})
</script>
</body>
3. 内联样式绑定:直接绑定style(v-bind:style)
(1)对象表示法
<script src="../js/vue.js"></script>
<style>
div {
width: 100px;
height: 100px;
}
.class1 {
background-color: #ff0;
}
.class2 {
background-color: #f00;
}
</style>
<body>
<div id="app" v-bind:class="[c1,c2]" v-on:click="changeColor">
<div v-bind:style="{color:fontColor,fontSize:mySize}">白桦林</div>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
c1: 'class1',
c2: '',
fontColor:'blue',
mySize:'18px'
},
methods: {
changeColor() {
this.c1 = (this.c1 == '' ? 'class1' : '')
this.c2 = (this.c2 == '' ? 'class2' : '')
}
}
})
</script>
</body>
(2)数组表示法
<script src="../js/vue.js"></script>
<style>
div {
width: 100px;
height: 100px;
}
.class1 {
background-color: #ff0;
}
.class2 {
background-color: #f00;
}
</style>
<body>
<div id="app" v-bind:class="[c1,c2]" v-on:click="changeColor">
<div v-bind:style="[colorStyle,fontStyle]">白桦林</div>
</div>
<script>
const vm = new Vue({
el: '#app',
data: {
c1: 'class1',
c2: '',
colorStyle:{color:'red'},
fontStyle:{fontSize:'32px'}
},
methods: {
changeColor() {
this.c1 = (this.c1 == '' ? 'class1' : '')
this.c2 = (this.c2 == '' ? 'class2' : '')
}
}
})
</script>
</body>