在Angular 2中获取对象属性

时间:2017-10-27 17:34:34

标签: angular

我订阅了一个对象。我试图获取该对象的一个​​属性 - publishedOn但在控制台中遇到问题Cannot read property 'publishedOn' of undefined

这是我的订阅:

 ngOnInit() {

    //Get the source from the source display panel
    this.subscription = this.sourceDisplayService.currentSource.subscribe(source => this.source = source);

    this.compareDates(this.source);

我的日期比较方法:

 compareDates(source){
    let context;
    let dateP = this.source;
    console.log(source.publishedOn);
    let publishedDate = new Date(dateP.publishedOn); 
     if (this.source.publishedOn <= this.electionDate) {
        let context = "Pre-election";
     } else {
        let context = "Post-election";
     }
     console.log(context);
     return context;
  }

1 个答案:

答案 0 :(得分:0)

好的,这里强调的第一件事是尝试在可用之前处理它。

下面修改过的代码应该可以工作(记住,当你订阅EventEmitter时它是异步代码,在你订阅的代码语句之后的所有内容都会执行非阻塞,但是这个值还没有可用...不确定为什么你要将它分配给this.subscription但是我没有看到其余的代码所以你可能想要使用Observable它是什么(在这种情况下需要其他相关代码才能看到什么需要做的是附加异步实时馈送...)或者你可能真的只想得到那个响应并用它做一些事情(就像在Promise中一样,在这种情况下你不会分配它的对Observables的工作方式没有任何意义)......

如果以下内容不起作用(我没有测试过),请详细说明代码的其余部分......

gOnInit() {

//Get the source from the source display panel
this.sourceDisplayService.currentSource.subscribe(
                      source => {
                             this.compareDates(source);
                             // remember that anything else that needs to happen when this value changes needs to be triggered either in compareDates or afterwards inside this code block (curly brackets)...
                    );