开发者问题收集

Vue js,无法读取属性$el

2019-04-15
5891

我有正确理解流量元素的问题,在vue js中调用的方法。这是标准的想法 - 从REST API中获取一些数据,然后在浏览器上渲染。

我写入 motted() 的获取方法。另外,我在那里添加了调用 renderhomepagemethod() 。此方法是用 方法写的:

719345041

in renderhomepagemethod() i i使用 this.refs $ < /代码>和 $ el 。可能存在问题,一切正常,但是在浏览器中,我得到了警告:

111230577

可能我应该调用

014192316

在另一个地方。但是在哪里?

1个回答

似乎您引用的组件在主组件渲染之前未渲染,因此会出现引用错误。

一种 hack 方式可能是这样的:

mounted() {
    axios.get("http://localhost:3000/api/test").then(response => {
        this.testData= response.data
        setTimeout(() => {
            this.renderHomePageMethod();
        }, 1000); // or any other minimum delay before the subcomponent is rendered
    });
}

或者更好更难的方式,创建一个 event-bus.js 文件,其中包含:

import Vue from 'vue';
export const EventBus = new Vue();

在您的主组件和子组件中:

import { EventBus } from "./event-bus.js";

在您的子组件中,当主组件准备好滚动时,这将向主组件发送通知:

mounted(){
    EventBus.$emit("subcomponent:is-mounted");
}

在您的主组件中:

data(){
    return {
       testData: null
    }
},
mounted(){
   axios.get("http://localhost:3000/api/test").then(response => {
       this.testData= response.data
   });
   EventBus.$on("subcomponent:is-mounted", () =>{
       this.renderHomePageMethod();
   });
},
beforeDestroy(){
   EventBus.$off("subcomponent:is-mounted");
   // don't forget to remove the listeners because of duplicate listeners may occur 
   // if your component refreshes (remounts)
}
Taha Paksu
2019-04-15