vue中this问题不太明白,请老师讲解一下代码中的问题以及应用中的this指向,和什么时候需要用this
来源:1-6 父子组件间如何通过事件进行通信(1)
weixin_慕村1291783
2020-12-22 12:27:01
# 具体遇到的问题
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
</body>
<script>
const app = Vue.createApp({
data() {
return {
num: 1
}
},
methods: {
add(param) {
this.num = param
}
},
template: '<div><test :ttt="num" @handle-click="add" /></div>'
})
app.component('test', {
props: ['ttt'],
emits: {
handleClick: (ttt) => {
if (ttt > 0) { //为什么这里也不用this.调用就能获取到ttt的值 ,请老师详细讲解下这里面的this调用的问题
return true
} else {
return false
}
}
},
methods: {
handleClick() {
this.$emit('handleClick', this.ttt + 2) //为什么这里需要用this.调用才能获取ttt的值
}
},
template: '<div @click="handleClick" >{{ttt}}</div>' //而这里就不用this.调用
})
const vm = app.mount('#root')
</script>
</html>
1回答
好帮手慕夭夭
2020-12-22
同学你好,问题解答如下:
1、正常情况下,vue组件中使用的this,指向的是当前组件的vue实例。那么通过this,就可以调用vue实例上的方法和数据。
例如下面代码中,都是通过this获取实例上的数据。
2、emits这里比较特殊,emits中this并不会指向实例,而是指向window(这个特殊记一下)。所以this.ttt获取的是window上的属性ttt,而不是vue实例中的数据。
这里的ttt,是通过参数的方式传递进来的。如下:
3、模板字符串中,直接通过数据名称绑定数据即可,这个是规定的语法,固定记一下。
4、什么使用使用this,需要具体情况具体分析哦。常见的情况,就是上面第一条所讲,获取vue实例上的数据或者方法。例如$emit是实例上的方法,那么就要通过$emit获取。
这个遇到了,自己多总结。总结的多了,也就熟悉了。
祝学习愉快~
相似问题