Angular Ngrx:如何监控阵列中单个对象的变化

Angular Ngrx:如何监控阵列中单个对象的变化,angular,ngrx,Angular,Ngrx,这就是我在阵列中监视selectedUser的方式。但是,如果更新了数组的任何其他元素,则会触发watchSelectedUser observable,因为它只应在更新selectedUser对象时触发 --现行代码-- 减速器代码: 订阅选定的用户型号更改 我建议将数据结构从数组转换为每个用户的集合/键值对 这将允许您选择UserListReducers[\u id],这意味着您将不会让其他UserModel对象改变它们所包含的数组 state: ApplicationState = {

这就是我在阵列中监视selectedUser的方式。但是,如果更新了数组的任何其他元素,则会触发watchSelectedUser observable,因为它只应在更新selectedUser对象时触发

--现行代码--

减速器代码:

订阅选定的用户型号更改


我建议将数据结构从数组转换为每个用户的集合/键值对

这将允许您选择UserListReducers[\u id],这意味着您将不会让其他UserModel对象改变它们所包含的数组

state: ApplicationState = {
   users: {
      'd27f23d67f23i7d23': {name: 'Nate, '_id': 'd27f23d67f23i7d23'},
      '87387387g3487gd83': {name: 'Shyamal, '_id': '87387387g3487gd83'}
   }
}


watchSelectedUser = (): Observable <UserModel> => {
    return this.userlistStore.select(userReducers['87387387g3487gd83']);
}

这有点粗糙,我不确定选择逻辑是否完美,但现在您一次只能访问一个用户。它需要一点重构和一个新的实体适配器,但它是一个更好的结构。

你能分享一个例子吗请勾选我的例子否,我还需要另一个状态变量,即selectedId。如何使用SelectedName监视selectedUser我还需要另一个处于状态的变量,即selectedId。如何使用selectedID监控selectedUser在我的示例中,我硬编码了selectedID,您可以用变量userReducers[selectedID]替换
watchSelectedUser = (): Observable<UserModel>=>{
        return this.userlistStore.select(userlistReducers.selectAll).pipe(map(users => {
            return users.find(x=> x.UserId == this.getSelectedUserId());
        }));
    }
state: ApplicationState = {
   users: {
      'd27f23d67f23i7d23': {name: 'Nate, '_id': 'd27f23d67f23i7d23'},
      '87387387g3487gd83': {name: 'Shyamal, '_id': '87387387g3487gd83'}
   }
}


watchSelectedUser = (): Observable <UserModel> => {
    return this.userlistStore.select(userReducers['87387387g3487gd83']);
}