Angular 4:无法创建组件的对象

时间:2018-11-05 05:28:31

标签: angular angular-components

我正在使用负责上传文件的第三方组件。我正在如下所示将这个组件导入到我的组件中,但是问题是我从来没有进入if循环内。谁能指导我如何创建UploadComp的对象?

import { UploadComp } from com.package.folder;

export class showUpload {
    @ViewChild (UploadComp) uploadCompObj: UploadComp;


constructor(){
    if(this.uploadCompObj){     //I am never going inside this if
        this.uploadCompObj.popup = true;
    }
} }

上传组件如下:

export declare class UploadComp implements Oninit{
    popup: boolean;
    overlay: boolean;
    fileName: string;
    errorMsg: any[];
}

3 个答案:

答案 0 :(得分:2)

使用AfterViewInit()生命周期并使用if条件

import { UploadComp } from com.package.folder;

        export class showUpload {
            @ViewChild (UploadComp) uploadCompObj: UploadComp;
        }

        constructor(){}
        ngAfterViewInit() {
           if(this.uploadCompObj){     //I am never going inside this if
                this.uploadCompObj.popup = true;
            }
        }
       }

答案 1 :(得分:0)

我认为您必须使用角度生命周期挂钩。构造函数在角度稳定之前被调用。因此,请使用ngOnInit

ngOnInit(){
    if(this.uploadCompObj){      
        this.uploadCompObj.popup = true;
    }
}

答案 2 :(得分:0)

@ViewChild()不是导入组件类的一部分,而是从component.html

获取子组件的一部分

如果可以很好地使用它,我会为您进行一些更改

从组件类中删除@ViewChild(),您的代码应如下所示-

uploadCompObj: UploadComp = {
    popup: true,
    overlay: true,
    fileName: null,
    errorMsg: null
};

接下来,您需要从尝试导入的组件类中删除declare-我不确定为什么要使用声明,但是只要导出一个组件类,就可以创建对象(如果它不是错误)问题,请不要删除

现在,您终于可以在constructoronInit()中为属性设置值了,但是最佳实践是在onInit()尝试访问的地方更改值-希望它能起作用

谢谢-编码愉快!!