接上一篇 Vue模板语法(一).
样式绑定和事件处理
1.1样式绑定
1.2事件处理–阻止冒泡
1.3事件处理–按钮点击一次
1.4按钮修饰符
1.5select标签
1.6复选框标签
样式绑定
1.1 class绑定
使用方式:v-bind:class=“expression”
expression的类型:字符串、数组、对象
1.2 style绑定
v-bind:style=“expression”
expression的类型:字符串、数组、对象
事件处理器(v-on)
事件修饰符
Vue通过由点(.)表示的指令后缀来调用修饰符,
.stop
.prevent
.capture
.self
.once
<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>
<!-- click 事件只能点击一次 -->
<a v-on:click.once="doThis"></a>
按钮修饰符
按键修饰符
Vue允许为v-on在监听键盘事件时添加按键修饰符:
<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">
Vue为最常用的按键提供了别名
<!-- 同上 -->
<input v-on:keyup.enter="submit">
全部的按键别名:
.enter
.tab
.delete (捕获 "删除" 和 "退格" 键)
.esc
.space
.up
.down
.left
.right
.ctrl
.alt
.shift
.meta
案例
代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.1/vue.js"></script>
<style type="text/css">
.a {
color: black;
}
.b {
color: pink;
}
.c {
font-size: 30px;
}
</style>
</head>
<body>
<div id="app">
<ul>
<li>
<h3>样式绑定</h3>
<span :class="a">你大爷</span>
<span :class="b">你大爷</span>
<span :class="c">你大爷</span>
</li>
<li>
<h3>事件处理--阻止冒泡</h3>
<div style="background-color: pink;width: 500px;height: 500px;" @click="d">
<div style="background-color: blueviolet;width: 400px;height: 400px;" @click="e">
<div style="background-color: red;width: 300px;height: 300px;" @click="f">
</div>
</div>
</div>
</li>
<li>
<h3>事件处理--按钮只能点击一次</h3>
{{info}}<input type="text" v-model="msg" />
<button @click="w">无限</button>
<button @click.once="w">一次</button>
</li>
<li>
<h3>按键修饰符</h3>
{{info}}<input type="text" v-model="msg" v-on:keyup.enter="w" />
<button @click="w">无限</button>
<button @click.once="w">一次</button>
</li>
<li>
<h3>select标签</h3>
<select name="hobby" v-model="selectedIds">
<option v-for="g in datas" :value="g.id">{{g.name}}</option>
</select>
选中的值:{{selectedIds}}
</li>
<li>
<h3>复选框标签</h3>
<div v-for="g in datas">
<input type="checkbox" :value="g.id" name="likes" v-model="selectedIdsAttr"/>{{g.name}}
</div>
选中的值:{{selectedIdsAttr}}
</li>
</ul>
</div>
</body>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
msg: '',
info: '',
a: 'a',
b: 'b',
c: ['b', 'c'],
datas: [{
id: 1,
name: 'aaa'
},
{
id: 2,
name: 'bbb'
},
{
id: 3,
name: 'ccc'
}],
selectedIds:'',
selectedIdsAttr:[]
},
methods: {
d() {
alert('aaaa');
},
e() {
alert('bbbb');
},
f() {
alert('cccc');
},
w() {
this.info = this.msg;
this.msg = '';
}
}
})
</script>
</html>
效果
组件
2.1组件介绍
2.2全局和局部组件
2.3props
组件介绍
组件(Component)是Vue最强大的功能之一
组件可以扩展HTML元素,封装可重用的代码
组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树
全局和局部组件
全局组件:Vue.component(tagName, options),tagName为组件名,options为配置选项。
局部组件: new Vue({el:’#d1’,components:{…}})
注册后,我们可以使用以下方式来调用组件:
<tagName></tagName>
props
props是父组件用来传递数据的一个自定义属性。
父组件的数据需要通过props把数据传给子组件,子组件需要显式地用props选项声明 “prop”
案例
代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.1/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li>
<h2>局部组件的注册</h2>
<my-button></my-button>
<!-- <button @click="submit">被点击n次</button> -->
</li>
<li>
<h2>全局组件的注册</h2>
<my-button2></my-button2>
</li>
<li>
<h2>组件的通信(父传子)</h2>
<my-button m='zs'></my-button>
</li>
<li>
<h2>组件的通信(子传父)</h2>
<!-- <button @three-click='aa'></button> -->
<my-button m='zs' @three-click='aa'></my-button>
</li>
</ul>
</div>
</body>
<script type="text/javascript">
Vue.component('my-button2',{
template: '<button v-on:click="submit">被点击{{n}}次</button>',
data() {
return {
n: 0
}
},
methods: {
submit() {
this.n += 1;
}
}
})
new Vue({
el: '#app',
data(){
return {
}
},
components: {
'my-button': {
props:['m'],
template: '<button v-on:click="submit">被{{m}}点击{{n}}次</button>',
data() {
return {
n: 0,
zd:'折叠效果'
}
},
methods: {
submit() {
this.n += 1;
//注册一个事件,让外部调用,然后顺便接收内部的值
if(this.n%3==0){
this.$emit('three-click',this.zd);
}
}
}
}
},
methods:{
aa(v){
alert(v);
}
}
})
</script>
</html>
==效果=
Over…