我在设置评论时遇到问题, 这是角度2项目的一部分。 this.reviews = targ这一行给了我 TypeError:无法设置undefined的属性'reviews' targ似乎存在,因为我可以成功地将它打印到控制台中。 任何想法为什么会发生这种情况?
import { ReviewService } from '../review.service';
import { Review } from '../review/review.component'
import { Component} from '@angular/core';
import { OnInit } from '@angular/core';
@Component({
selector: 'review-list',
templateUrl: './review-list.component.html',
styleUrls: ['./review-list.component.css'],
providers: [ReviewService] //for the injector to be able to inject ReviewerService
})
export class ReviewListComponent implements OnInit {
public reviews: Review[];
constructor(private reviewService: ReviewService) {
this.reviews = [] ;
}
initializeReviews(): void {
this.reviewService.getReviews().then(
this.set
).catch(function(reason){
console.log(reason);
});
}
set(targ):void {
console.log(targ);
this.reviews = targ;
}
ngOnInit(): void {
this.initializeReviews();
//this.reviews = this.reviewService.get();
}
}
答案 0 :(得分:2)
传递方法引用时,this
默认情况下不会指向当前的类实例。使用.bind(this)
或箭头函数确保.this
指向当前的类实例:
initializeReviews(): void {
this.reviewService.getReviews().then(
this.set.bind(this) // << add `.bind(this) or
// (val) => this.set(val)
).catch(function(reason){
console.log(reason);
});
}
答案 1 :(得分:2)
如果您将this
这样的method
传递给promise
,则会丢失this
上下文。您应该使用匿名函数包装器,或绑定initializeReviews(): void {
this.reviewService.getReviews().then((response) => {
this.set(response);
})
.catch((reason) => {
console.log(reason);
});
}
上下文
this.reviewService.getReviews().then(this.set.bind(this))
或
function
也绝不使用TypeScript
类中的this
关键字。这也会导致setDT(mydf)
上下文丢失。