2017-07-12 59 views
1

我想观看json的嵌套属性。每当此嵌套属性更改时调用fn()。角4 - 观察属性变化的变量

export class HeaderComponent { 
    user: any; 

    constructor(){ 
    this.user = { 
     options: [ 
     { name: 'Jenny Hess', img: 'assets/img/avatar/small/jenny.jpg' }, 
     { name: 'Elliot Fu', img: 'assets/img/avatar/small/elliot.jpg' }, 
     { name: 'Stevie Feliciano', img: 'assets/img/avatar/small/stevie.jpg' } 
     ], 
     selected: { name: 'Jenny Hess', img: 'assets/img/avatar/small/jenny.jpg' } 
    } 
    } 

FN变化值

public changeUser(item) { 
    this.user.selected = item; 
    /*Some Code here*/ 
} 

    public customLogin(user) { 
     /*Some Code here*/ 
     this.user.selected = user; 
     /*Some Code here*/ 
} 

每当this.user.selected变化值调用一个函数。 我也使用rxjx

任何建议?

+0

'HeaderComponent'是否需要监视值或其他组件(父组件)? –

+0

@ ADreNaLiNe-DJ通过函数在'HeaderComponent'中更改'this.user.selected'的编号值。 –

+0

提供更多信息,以何种方式改变。你可以尝试'ngDoCheck'。 –

回答

2

你可以做这样的事情:

export class HeaderComponent implements OnDestroy { 
    user: any; 
    userSelectSubject: BehaviorSubject<{name: string, img: string}>; 
    private userSelectSubscription: Subscription; 

    constructor(){ 
    this.user = { 
     options: [ 
     { name: 'Jenny Hess', img: 'assets/img/avatar/small/jenny.jpg' }, 
     { name: 'Elliot Fu', img: 'assets/img/avatar/small/elliot.jpg' }, 
     { name: 'Stevie Feliciano', img: 'assets/img/avatar/small/stevie.jpg' } 
     ] 
    } 

    this.userSelectSubject = new BehaviorSubject<{name: string, img: string}>({ name: 'Jenny Hess', img: 'assets/img/avatar/small/jenny.jpg' }); 

    this.userSelectSubscription = this.userSelectSubject.subscribe((newSelectedUser) => { 
     this.user.selected = newSelectedUser; 
    }); 
    } 

    ngOnDestroy() { 
    this.userSelectSubscription.unsubscribe(); 
    } 
} 

然后你只需要调用this.userSelectSubject.next({...})传递新的选择的用户作为参数。

+0

谢谢@Giovane它帮助 –