我试图迁移从NGRX V2到V4现有的应用程序,和我有一点麻烦的情景我没有看到覆盖在migration document。迁移文件有删除@ NGRX /核心,但我不知道该怎么跟我的减速,从@ NGRX /核心/添加/运营/选择导入,然后从可观察到的事情。我收到错误“属性‘选择’上键入‘可观测’不存在”,从所有的减速器。角NGRX迁移错误“属性‘选择’在类型不存在‘可观察<State>’”
/actions/action-with-payload.ts - 解决方法用于迁移
import { Action } from '@ngrx/store';
export class ActionWithPayload implements Action {
type: string;
payload?: any;
}
/actions/users-list.ts
export class UsersListActions {
static LOAD_USERS_LIST = '[UserManagement/Users List] Load Users List';
loadUsersList(): ActionWithPayload {
return {
type: UsersListActions.LOAD_USERS_LIST
};
}
static LOAD_USERS_LIST_SUCCESS = '[UserManagement/Users List] Load Users List Success';
loadUsersListSuccess(users: User[]): ActionWithPayload {
return {
type: UsersListActions.LOAD_USERS_LIST_SUCCESS,
payload: users
};
}
}
/reducers/users-list.ts
export interface UsersListState {
loaded: boolean;
loading: boolean;
entities: User[];
}
const initialState: UsersListState = {
loaded: false,
loading: false,
entities: [],
}
export default function (state = initialState, action: ActionWithPayload): UsersListState {
switch (action.type) {
case UsersListActions.LOAD_USERS_LIST:
return Object.assign({}, state, {
loading: true
});
case UsersListActions.LOAD_USERS_LIST_SUCCESS:
return Object.assign({}, state, {
loaded: true,
loading: false,
entities: action.payload
});
default:
return state;
}
};
export function getLoaded() {
return (state$: Observable<UsersListState>) => state$
.select(s => s.loaded);
}
export function getLoading() {
return (state$: Observable<UsersListState>) => state$
.select(s => s.loading);
}
export function getUsers() {
return (state$: Observable<UsersListState>) => state$
.select(s => s.entities);
}
/reducers/index.ts
import usersListReducer, * as fromUsers from './users-list';
export interface UserManagementState {
usersList: fromUsers.UsersListState,
};
export { usersListReducer }
export function getUsersListState() {
return (state$: Observable<UserManagementState>) => state$
.select(s => s.usersList);
}
export function getUsers() {
return compose(fromUsers.getUsers(), getUsersListState());
}
export function getUsersLoaded() {
return compose(fromUsers.getLoaded(), getUsersListState());
}
export function getUsersLoading() {
return compose(fromUsers.getLoading(), getUsersListState());
}
/pages/user-list.page.ts
export class UserListPage {
private users$: Observable<User[]>;
private usersLoading$: Observable<boolean>;
constructor(
private store: Store<UserManagementState>,
) {
this.users$ = store.let(getUsers());
this.usersLoading$ = store.let(getUsersLoading());
}
}
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { usersListReducer } from '/reducers';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
BrowserAnimationsModule,
AppRoutingModule,
SharedModule.forRoot(),
StoreModule.provideStore({
usersList: usersListReducer,
...
})
],
declarations: [AppComponent],
bootstrap: [AppComponent],
providers: [
...
]
})
export class AppModule { }
也加入你的模块代码 – Skeptor
我只是在使用减速器中的AppModule代码添加特定的状态。 provideStore需要更新(toRoot?),但我试图在迁移模块之前解决选择的问题。 – Carl
我会展示一个演示代码,如果你可以创建一个plnkr,我可以给出一个工作示例。 – Skeptor