Vue的基本语法Ⅱ
目录
一、样式绑定
二、事件处理器
三、Vue表单
四、组件通信(父传子)
五、组件通信(子传父)
一、样式绑定
1.1基本样式的绑定
class绑定 v-bind:class=“c”
运行结果:
1.2style绑定
运行结果:
注意要:style=“{fontSize:e}” 只需要一个花括号即可,且需要驼峰命名
二、事件处理器
冒泡事件:简单来说,就是一层接一层
阻止单击事件冒泡
v-on:click.stop
提交事件不再重载页面
v-on:submit.prevent
修饰符可以串联
v-on:click.stop.prevent=“doThat”
只有修饰符
form v-on:submit.prevent
添加事件侦听器时使用事件捕获模式
div v-on:click.capture=“doThis”
只当事件在该元素本身(而不是子元素)触发时触发回调
v-on:click.self=“doThat”
click 事件只能点击一次
v-on:click.once=“doThis”
阻止单击事件冒泡
v-on:click.stop=“doThis”
事件修饰符
Vue通过由点(.)表示的指令后缀来调用修饰符,
.stop
.prevent
.capture
.self
.once
</head>
<body>
<div id="app">
<input v-model="msg" />
<button type="button" @click="functionA">请点我</button>
<button type="button" @click.once="functionB">你只有一次机会</button>
</div>
<script type="text/javascript">
new Vue({
el: '#app',
data() {
return {
msg: "默认默认"
}
},
methods: {
functionA() {
alert(this.msg);
},
functionB() {
alert(this.msg)
}
}
})
</script>
</body>
运行结果:
请点我可以一直点,也会一直弹出.
你只有一次机会,点过一次之后就不会再弹出了
三、Vue表单
用v-model指令在表单控件元素上创建双向数据绑定
常用控件:
文本框/密码框/文本域/隐藏域
单选复选框/多选复选框
单选按钮
下拉框
</head>
<body>
<div id="app">
姓名:<input type="text" v-model="name"><br />
密码:<input type="password" v-model="pwd"><br />
年龄:<input type="text" v-model="age"><br />
性别:<input type="radio" name="sex" value="1" v-model="sex">男
<input type="radio" name="sex" value="0" v-model="sex">女<br />
爱好:<span v-for="n in likes">
<input type="checkbox" :value="n.id" v-model="myLike">{{n.name}}
</span><br />
类别: <select v-model="myType">
<option v-for="n in types" :value="n.id">{{n.name}}</option>
</select><br />
备注:<textarea rows="10" cols="20" v-model="remark"></textarea><br />
确认<input type="checkbox" v-model="ok" />
<span v-if="ok">
<button type="button" @click="do_ss" >提交</button>
</span>
<span v-else="">
<button type="button" @click="do_ss" disabled="disabled">提交</button>
</span>
</div>
<script type="text/javascript">
new Vue({
el: '#app',
data() {
return {
name: null,
pwd: null,
age: 10,
sex: 1,
likes: [{
id: 1,
name: "唱歌"
},
{
id: 2,
name: "跳舞"
},
{
id: 3,
name: "打篮球"
},
{
id: 4,
name: "弹吉他"
},
],
types: [{
id: 1,
name: "清纯"
},
{
id: 2,
name: "可爱"
},
{
id: 3,
name: "御姐"
},
{
id: 4,
name: "萝莉"
}
],
remark: '我都要...',
ok: false,
myLike:[],
myType:null
}
},
methods:{
do_ss(){
var obj={
name:this.name,
pwd:this.pwd,
age:this.age,
sex:this.sex,
likes:this.myLike,
types:this.myType,
remark:this.remark
}
console.log(obj);
}
},
computed: {
},
})
</script>
</body>
运行结果:
填写数据之后:
注意在年龄那块,直接加数字会被当做字符串需要用
.number
将用户的输入值转为 Number 类型
四、组件通信(父传子)
1.1组件简介
组件(Component)是Vue最强大的功能之一
组件可以扩展HTML元素,封装可重用的代码
组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树
1.2全局和局部组件
全局组件:Vue.component(tagName, options),tagName为组件名,options为配置选项
局部组件: new Vue({el:‘#d1’,components:{…}}) 一个地方定义,多个地方引用
注册后,我们可以使用以下方式来调用组件:
</head>
<body>
<div id="app">
<mybutton></mybutton>
</div>
<script type="text/javascript">
new Vue({
el: '#app',
components: {
'mybutton':{
template:'<button>提交审核</button>'
}
},
data() {
return {
}
}
})
</script>
</body>
运行结果:
父传子,关键在
props:[‘m’]
props是父组件用来传递数据的一个自定义属性。
父组件的数据需要通过props把数据传给子组件,子组件需要显式地用props选项声明 “prop”
</head>
<body>
<div id="app">
<mybutton m='qq'></mybutton>
<mybutton m='ww'></mybutton>
</div>
<script type="text/javascript">
new Vue({
el: '#app',
components: {
'mybutton':{
props:['m'],
template:'<button @click="doa">{{m}}提交审核{{n}}次</button>',
data(){
return{
n:0
}
},
methods:{
doa(){
this.n ++;
}
}
}
},
data() {
return {
}
}
})
</script>
</body>
运行结果:
组件中和vue一样可以定义变量,方法
五、组件通信(子传父)
通过走自定义事件来完成
监听事件:$on(eventName)
触发事件:$emit(eventName)
</head>
<body>
<div id="app">
<mybutton m='qq' @three-click="functionA"></mybutton>
<mybutton m='ww' @four="functionB"></mybutton>
</div>
<script type="text/javascript">
new Vue({
el: '#app',
components: {
'mybutton':{
props:['m'],
template:'<button @click="doa">{{m}}提交审核{{n}}次</button>',
data(){
return{
n:0
}
},
methods:{
doa(){
let name='张三';
let sex='男';
let hobby='游戏';
this.n ++;
//通过走自定义事件来完成
if(this.n%3==0)
this.$emit('three-click',name,sex,hobby);
if(this.n%4==0)
this.$emit('four',name,hobby);
}
}
}
},
data() {
return {
}
},
methods:{
functionA(a,b,c){
console.log(a,b,c);
},
functionB(a,b,c){
console.log(a,b,c);
}
}
})
</script>
</body>
运行结果:
注1:Vue自定义事件是为组件间通信设计
vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定
父Vue实例->Vue实例,通过prop传递数据
子Vue实例->父Vue实例,通过事件传递数据
注2:事件名
不同于组件和prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称
建议使用“短横线分隔命名”,例如:three-click
t sex=‘男’;
let hobby=‘游戏’;
this.n ++;
//通过走自定义事件来完成
if(this.n%4==0)
this.$emit('four',name,hobby);
}
}
}
},
data() {
return {
}
},
methods:{
fucntionB(a,b,c){
console.log(a,b,c);
}
}
})
</script>
</body>
运行结果:
注1:Vue自定义事件是为组件间通信设计
vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定
父Vue实例->Vue实例,通过prop传递数据
子Vue实例->父Vue实例,通过事件传递数据
注2:事件名
不同于组件和prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称
建议使用“短横线分隔命名”,例如:four-click