我有一个要求用户提供服务的组件
父组件ts:
constructor(private router:Router, private route: ActivatedRoute, private userService: UserService){
super();
this.state = 0;
userService.getById(params['id']).subscribe(this.setUser);
}
setUser(user:UserModel){
this.user = user;
if (user) this.state = user.profile ? 2 : 1;
console.log("assinging well", user, state);
}
及其模板:
<div [ngSwitch]="state">
<div *ngSwitchCase=0>
<user-form (formSubmitted)="save($event)"></user-form>
</div>
<div *ngSwitchCase=1>
<profile-form [user]="user" (formSubmitted)="save($event)"></profile-form>
</div>
<div *ngSwitchCase=2>
<curriculum-form [user]="user" (formSubmitted)="save($event)"></curriculum-form>
</div>
</div>
setUsers中的console.log
正确打印数据,加载用户,状态为1.
但是模板仍然将0的情况重新定义,它不是重新加载或更新的。如果构造函数中的状态设置为1,那么交换机会选择我想要的组件,但是通过输入传递的用户不会更新(未定义)。
@Edit:
子组件:
@Input() user:UserModel;
onSubmit() {
console.log(user);
let model = this.profileForm.value;
this.formSubmitted.emit(model);
}
在提交表单时,console.log会打印undefined
答案 0 :(得分:0)
似乎当我将方法setUser
作为参数传递时,它没有绑定到实例,当它被执行时,它无法访问属性值。
我为userService.getById(params['id']).subscribe(this.setUser);
更改了userService.getById(params['id']).subscribe(this.setUser.bind(this));
并且有效