Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 无法读取属性';取消订阅未定义的';改道_Angular_Angular2 Observables - Fatal编程技术网

Angular 无法读取属性';取消订阅未定义的';改道

Angular 无法读取属性';取消订阅未定义的';改道,angular,angular2-observables,Angular,Angular2 Observables,在我的angular 2应用程序中,我有一个父组件,我订阅了一个数据源,该数据源将该数据向下传递到多个子组件。在我的一个子组件中,我尝试在我的应用程序中导航到一个不同的路由,其中的参数来自顶部组件中的订阅。每当我在应用程序中执行此操作时,都会出现以下错误: ./CompanyPromoCardComponent类CompanyPromoCardComponent中出错- 内联模板:6:10原因:无法读取的属性“unsubscribe” 未定义 这是我的:CompanyPromoCardCompo

在我的angular 2应用程序中,我有一个父组件,我订阅了一个数据源,该数据源将该数据向下传递到多个子组件。在我的一个子组件中,我尝试在我的应用程序中导航到一个不同的路由,其中的参数来自顶部组件中的订阅。每当我在应用程序中执行此操作时,都会出现以下错误:

./CompanyPromoCardComponent类CompanyPromoCardComponent中出错- 内联模板:6:10原因:无法读取的属性“unsubscribe” 未定义

这是我的:CompanyPromoCardComponent

export class CompanyPromoCardComponent implements OnInit {

  @Input() company:Object;
  constructor(private router: Router) { }

  ngOnInit() {
  }

  gotoDetail(_id: String) {
    let link = ['/företag/' + _id + '/företagsinformation'];
    this.router.navigate(link);
  }

}
<div *ngIf="company">
  <div class="panel panel-default">
    <div class="panel-body">
      <div class="row">
        <div class="col-md-4">
          <app-company-industry [company]='company' [sub]='sub'></app-company-industry>
        </div>
        <div class="col-md-8">
          <app-company-targetgroup [company]='company'></app-company-targetgroup>
        </div>
      </div>  
      <app-company-description [company]='company'></app-company-description>
      <app-company-tags [company]='company'></app-company-tags>
    </div>
    <div class="panel-footer">
      <div>
      <a class="btn btn-primary" (click)="gotoDetail(company._id)">Info</a>
      </div>
    </div>
  </div>
</div>

发生此错误的原因是什么?我只想导航到另一个路由,该路由取决于从我的公司对象返回的id。

在执行以下操作之前,最好检查变量是否未定义

ngOnDestroy(){
    if(this.sub){
         this.sub.unsubscribe();
    }
  }
您的问题是因为
@input
变量是通过属性分配的。所以,你可以

this.companyService.getCompaniesSearch()
     .skipWhile(data => {
         return _.isEmpty(data);
      })
     .subscribe(data => {
          console.log('data.companies: ' + data.companies);
          this.companies = data.companies;
        },
        err => {
          console.log(err);
          return false;
        }).unsubscribe();
注:

  • 添加跳过while会使您在数据可用之前不订阅
  • 完成数据订阅后,您可以如上所述取消订阅()

  • 所以你没有在你的代码中的任何地方使用
    取消订阅
    ?我已经尝试在没有任何运气的情况下取消订阅我的父组件OnDestroy,但除此之外,我还没有弄清楚可观察对象是如何工作的,所以我不明白我应该在哪里取消订阅。请包括这一部分,因为它是错误发生的地方。用订阅“公司数据”的订阅上的simple Ngondestory()。您正在为“getProfile”订阅中的“GetCompanySearch”设置订阅。如果组件在getProfile发出之前被销毁,则订阅将是未定义的。
    ngOnDestroy(){
        if(this.sub){
             this.sub.unsubscribe();
        }
      }
    
    this.companyService.getCompaniesSearch()
         .skipWhile(data => {
             return _.isEmpty(data);
          })
         .subscribe(data => {
              console.log('data.companies: ' + data.companies);
              this.companies = data.companies;
            },
            err => {
              console.log(err);
              return false;
            }).unsubscribe();