我正在学习Angular2。我正在学习编程课程之一,我在练习文件中遇到了以下代码。我很难理解语句" .do(this.toggleLogState.bind(this));" 是什么意思? 如果有人可以解释它会非常有用。提前谢谢。
请找到以下代码
@Injectable()
export class LoginService {
constructor(
private spinnerService: SpinnerService,
private userProfileService: UserProfileService) { }
login() {
return Observable.of(true)
.do(_ => this.spinnerService.show())
.delay(1000)
.do(this.toggleLogState.bind(this)); // don't understand what this statement will do
}
logout() {
this.toggleLogState(false);
}
private toggleLogState(val: boolean) {
this.userProfileService.isLoggedIn = val;
this.spinnerService.hide();
}
}
答案 0 :(得分:3)
.do(this.toggleLogState.bind(this))
这实际上与
相同.do(v => this.toggleLogState(v));
lambda表达式使this
中的toggleLogState
成为此类的实例,这也是.bind(this)
的作用。
bind
还确保将任何参数传递给给定方法。在这种情况下,参数来自可观察的。 Observable.of(true)
以布尔值true
开头。 do(...)
和delay(...)
始终传递传递给它们的相同参数值。所以在这个链的末尾,你首先要传递的是你开始的true
。