如何更改可观察的复杂对象?

时间:2017-07-03 13:29:20

标签: angular rxjs observable

在rxjs中我想改变复杂对象中的属性但是改变了它。

例如:

我有用户类:

class User {
    constructor(
        public name: string,
        public role: string
    ) { }
}

我的服务:

@Injectable()
export class AuthService {
    user: BehaviorSubject<User>;

    constructor() {
        this.user = new BehaviorSubject(
            new User('wizardnet', 'admin')
        );
    }

    setRole(role) {
        // change ONLY the Role property of this.user ???????
        // subscribe then clone the object and then call next() ??
    }
}

怎么做?

1 个答案:

答案 0 :(得分:1)

实际上,除非您不需要订阅以获得服务中的用户价值,否则您所有这一切都是正确的。您可以使用.value

@Injectable()
export class AuthService {
    user: BehaviorSubject<User>;

    constructor() {
        this.user = new BehaviorSubject(
            new User('wizardnet', 'admin')
        );
    }

    setRole(role) {
        const updateUser = Object.assign(this.user.value, {role: role});
        this.user.next(updateUser);
        return this.user.asObservable();
    }
}