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获取实例上的数据。

http://img.mukewang.com/climg/5fe18ef309bc998504600342.jpg

http://img.mukewang.com/climg/5fe198f609b3f8fe09330312.jpg


2、emits这里比较特殊,emits中this并不会指向实例,而是指向window(这个特殊记一下)。所以this.ttt获取的是window上的属性ttt,而不是vue实例中的数据。

http://img.mukewang.com/climg/5fe199380977245007340214.jpg


这里的ttt,是通过参数的方式传递进来的。如下:

http://img.mukewang.com/climg/5fe19ab20941a01508980593.jpg

3、模板字符串中,直接通过数据名称绑定数据即可,这个是规定的语法,固定记一下。

http://img.mukewang.com/climg/5fe19b4809e745cd07240096.jpg

4、什么使用使用this,需要具体情况具体分析哦。常见的情况,就是上面第一条所讲,获取vue实例上的数据或者方法。例如$emit是实例上的方法,那么就要通过$emit获取。

http://img.mukewang.com/climg/5fe19d190922df4804580060.jpg

这个遇到了,自己多总结。总结的多了,也就熟悉了。

祝学习愉快~


0

0 学习 · 15276 问题

查看课程