Angular 2绑定不起作用

时间:2017-01-31 13:05:43

标签: javascript angular binding

我有一个要求用户提供服务的组件

父组件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

1 个答案:

答案 0 :(得分:0)

似乎当我将方法setUser作为参数传递时,它没有绑定到实例,当它被执行时,它无法访问属性值。 我为userService.getById(params['id']).subscribe(this.setUser);更改了userService.getById(params['id']).subscribe(this.setUser.bind(this));并且有效