Angular 无法读取属性';取消订阅未定义的';改道
在我的angular 2应用程序中,我有一个父组件,我订阅了一个数据源,该数据源将该数据向下传递到多个子组件。在我的一个子组件中,我尝试在我的应用程序中导航到一个不同的路由,其中的参数来自顶部组件中的订阅。每当我在应用程序中执行此操作时,都会出现以下错误: ./CompanyPromoCardComponent类CompanyPromoCardComponent中出错- 内联模板:6:10原因:无法读取的属性“unsubscribe” 未定义 这是我的:CompanyPromoCardComponentAngular 无法读取属性';取消订阅未定义的';改道,angular,angular2-observables,Angular,Angular2 Observables,在我的angular 2应用程序中,我有一个父组件,我订阅了一个数据源,该数据源将该数据向下传递到多个子组件。在我的一个子组件中,我尝试在我的应用程序中导航到一个不同的路由,其中的参数来自顶部组件中的订阅。每当我在应用程序中执行此操作时,都会出现以下错误: ./CompanyPromoCardComponent类CompanyPromoCardComponent中出错- 内联模板:6:10原因:无法读取的属性“unsubscribe” 未定义 这是我的:CompanyPromoCardCompo
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();
注:
所以你没有在你的代码中的任何地方使用
取消订阅
?我已经尝试在没有任何运气的情况下取消订阅我的父组件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();