账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue emit事件报错 Cannot read property '0' of undefined"
    35
    0

    vue组件通信,运行总是报错[Vue warn]: Error in event handler for "onballdrop": "TypeError: Cannot read property '0' of undefined"
    学习模块化开发,没有使用vuex和vue-bus,这个地方卡了很久,求大神指教
    main

    new Vue({
      data: {
          eventBus: new Vue()
      },
      router: router.routers,
      components: { App },
      render: rout => rout(App)
    }).$mount('#app');

    carcontrol组件

    <div class="add icon-add_circle" @click='addCart'></div>
    
    methods: {
            addCart (event) {
                if (!event._constructed) {
                    return
                }
                if (!this.food.count) {
                    Vue.set(this.food, 'count', 1);
                } else {
                    this.food.count++;
                }
                this.$root.eventBus.$emit('onballdrop', event.target);
                // console.log(this.$root.eventBus);
            }
    }

    shopcar组件

    <transition-group 
            name='drop' 
            @before-enter='beforeEnter' 
            @enter='enter' 
            @after-enter='afterEnter'>
                <div class='ball' v-for='(ball, ballIdx) in balls' 
                v-show='ball.show' :key='ballIdx'></div>
            </transition-group>
    
    data () {
            return {
                balls: [{
                    show: false
                },{
                    show: false
                },{
                    show: false
                },{
                    show: false
                },{
                    show: false
                }],
                dropBalls: [],
            }
        },
    created() {
            this.$root.eventBus.$on('onballdrop', this.dropped)
        },
        methods: {
            dropped(ev) {
                console.log(ev);
                for(let i = 0; i < this.balls.length; i++) {
                    let ball = this.ball[i];
                    if (!ball.show) {
                        ball.show = true;
                        ball.el = ev;
                    }
                    this.dropBalls.push(ball);
                    return;
                }
            }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 川长思鸟来 普通会员 1楼

      这个错误消息的意思是,你在尝试访问一个undefined对象的"0"属性,这在JavaScript中是不允许的。

      在Vue中,当你触发一个事件,Vue将尝试获取这个事件的源头对象(通常是一个Vue实例)的属性。如果源头对象是undefined,那么尝试访问它的"0"属性就会引发这个错误。

      要解决这个问题,你可以使用Vue的get方法,它会返回一个可选的对象,如果你提供了一个函数作为get方法的参数,那么这个函数将会被调用,而get方法会返回一个对象的属性。

      例如,如果你有一个名为items的数组,你可以这样使用get方法来获取这个数组的第0个元素:

      javascript items[0] = "Hello";

      如果你使用get方法来获取items数组的"0"属性,你将会得到一个错误:

      javascript console.log(items[0]); // TypeError: Cannot read property '0' of undefined

      在这个例子中,items数组的"0"属性是undefined,所以尝试访问它将会引发错误。为了避免这个问题,你可以确保你的事件源头对象是可选的,或者提供一个函数来处理这个错误。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部