我試圖遷移從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