v-on
或者缩写@
绑定元素中的事件,例如下列代码
<a href="https://php.cn" v-on:click="showUrl($event)">显示网站地址: </a>
该标签 绑定了一个点击事件
v-if
或者多分支v-else-if
指令来决定改标签是否应该被渲染,例如下列代码
<p v-if="point >= 1000 && point < 2000">青铜会员</p>
<p v-else-if="point >= 2000 && point < 3000">白银会员</p>
<p v-else-if="point >= 3000 && point < 4000">黄金会员</p>
<p v-if="point >= 4000">钻石会员</p>
<p v-else>非会员</p>
上述代码实现了,根据point值来决定渲染哪个p标签
v-for
来实现列表的渲染,例如下列代码
<ul>
<li v-for="(item,index) of list" :key="index">{{item}}</li>
</ul>
上述代码实现了,渲染list数组中的所有元素
computed
来设置其计算属性,例如下列代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<title>计算属性,侦听器属性</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div class="app">
<p>{{a}}+{{b}}={{sum}}</p>
</div>
</body>
<script>
const app = Vue.createApp({
data(){
return {
a:1,
b:2,
}
},
computed:{
sum:{
get(){
return this.a+this.b;
},
}
}
}).mount(".app");
</script>
</html>
上述代码通过设置sum
的计算属性,计算了他的值
watch
来指定侦听的对象,例如下列代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<title>计算属性,侦听器属性</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div class="app">
<p><input type="number" @keydown.enter="this.a=$event.target.value">{{a}}+{{b}}={{sum}}</p>
</div>
</body>
<script>
const app = Vue.createApp({
data(){
return {
a:1,
b:2,
}
},
computed:{
sum:{
get(){
return this.a+this.b;
},
}
},
watch:{
sum(current,orign){
console.log(current,orign);
}
},
}).mount(".app");
</script>
</html>
上述代码,对sum
变量增加了监听器,当sum
发生变化时,将输出最新的结果current
跟上一次的结果orign
component
方法来注册一个组件,例如下列代码
const app = Vue.createApp({
})
// 2. 注册组件
app.component('ButtonCounter', {
props: ['username', 'email'],
template: '#counter',
data() {
return {
count: 0,
}
},
})
上述代码创建了一个自定义组件ButtonCounter
,并且绑定了id为counter
的子组件
props
来接受父组件传递过来的参数,例如下列代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div class="app">
<button-counter username="admin" email="admin@qq.com"></button-counter>
</div>
<template id="counter">
<p>用户: {{username}}</p>
<p>邮箱: {{email}}</p>
</template>
<script>
// 1. 创建实例
const app = Vue.createApp({
})
// 2. 注册组件
app.component('ButtonCounter', {
props: ['username', 'email'],
template: '#counter',
})
// 3. 绑定挂载点
app.mount('.app')
</script>
</body>
</html>
上述代码实现了,父组件向子组件传递username
与email
参数,子组件接收并且用p标签显示
子组件向父组件通信应该分为2步
@customEvent(...args)
来实现$emit(customEvent, ...args)
方法来实现,例如下列代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>监听子组件事件</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div class="app">
<button-counter username="admin" email="admin@qq.com" @review-count="review"></button-counter>
</div>
<template id="counter">
<button @click="count++">点赞: {{count}}</button>
<p>用户: {{username}}</p>
<p>邮箱: {{email}}</p>
<!-- 发布订阅 -->
<!-- $emit(自定义事件, 向父组件传递的参数[可选]) -->
<button @click="$emit('reviewCount', this.count)">评价</button>
</template>
<script>
// 1. 创建实例
const app = Vue.createApp({
methods: {
review(count) {
console.log(count)
if (count >= 20) {
alert('我是太爱大家了')
}
},
},
})
// 2. 注册组件
app.component('ButtonCounter', {
props: ['username', 'email'],
template: '#counter',
data() {
return {
count: 0,
}
},
})
// 3. 绑定挂载点
app.mount('.app')
</script>
</body>
</html>
上述代码中子组件使用emit()
方法发布了自定义事件reviewCount
,并且传入参数count
,父组件通过@review-count
监听自定义事件reviewCount
,触发了vue实例中的review
方法
相关推荐
© 2020 asciim码
人生就是一场修行