我有一个称为动物的功能减速器(切片减速器)。我想将这些减速器拆分为哺乳动物、鸟类、鱼类等。这部分很简单,因为我可以简单地使用ActionReducerMap.
现在假设哺乳动物的减速器状态很大,我想将其拆分为几个较小的减速器,即猫的家庭、狗的家庭等。 ActionReducerMap 不返回减速器并且不可嵌套。我尝试在网上搜索解决方案或示例,但找不到。简而言之,我的问题是如何制作多级嵌套减速器。
export interface AnimalsState{
mammals: fromMammals.mammalsState;
birds: fromBirds.birdsState;
}
export const reducers: ActionReducerMap<AnimalsState> = {
mammals: fromMammals.reducer,
birds: fromBirds.reducer
};
Run Code Online (Sandbox Code Playgroud)
我想将哺乳动物减速器拆分为更小的减速器。
我有一个名为 users-list 的组件。在这个组件里面有目录用户组件的 *ngFor 。
<directory-user-card *ngFor="let directoryUser of directoryUsers"
[directoryUser]="directoryUser">
Run Code Online (Sandbox Code Playgroud)
我需要最后一个 directory-user-card 组件具有不同的样式。所以我尝试在父组件上使用 last-child 但没有成功。
directory-user-card :last-child{
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
创建 ngrx 操作有两种方法。一种是定义一个新的类来实现Action类,另一种是使用“createAction”函数。有没有办法获取使用“createAction”方法创建的操作的类型?
例如,如果我有这个操作:
export const getWorker = createAction(
'[Worker Api] Get Worker',
props<{ workerId: number }>()
);
Run Code Online (Sandbox Code Playgroud)
我想让workerId 处于监听该操作的效果中:
getWorker$ = createEffect(() => {
return this.actions$.pipe(
ofType(WeatherApiActions.getWorker),
switchMap((action: { type: string, workerId: number }) => this.workerService.getWorker(action.workerId)),
map((worker: IWorker) => WeatherApiActions.getWorkerSuccess({ worker }))
)})
Run Code Online (Sandbox Code Playgroud)
和你一样,我不得不自己写这个类型。这使得效果与动作紧密耦合,这是一个巨大的缺点。所以我的问题是:我是否必须使用第一种创建操作的方法才能获得操作有效负载类型?
有没有办法使用基于文件的路由在 Next.js 中拥有“router-outlet”?这意味着路由将发生在容器页面的一部分内(与 Angular 中的 router-outlet 工作方式相同)?
我们的团队正在应用程序中使用 Angular Material 的 MatSnackBar。因为每个人负责不同的页面,所以每个页面的snackBars 的持续时间是不同的。有些将持续时间设置为 2000 毫秒,有些设置为 1000 毫秒,有些甚至设置为 3000 毫秒。
我想从单个变量中获取持续时间值,以便我可以在一个地方控制所有小吃店的持续时间。甚至可以让开发人员在调用snackBar.open 函数时不发送持续时间值。
this.snackBar.open(message, {
duration: 2000,
});
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我需要以编程方式更改选项卡而不触发selectedIndexChange事件。
我在这里做了一个 stackBlitz 示例。相关代码如下:
<mat-tab-group [selectedIndex]="tabIndex" (selectedIndexChange)="informChange($event)">
<mat-tab label="Tab 1"></mat-tab>
<mat-tab label="Tab 2"></mat-tab>
<mat-tab label="Tab 3"></mat-tab>
<mat-tab label="Tab 4"></mat-tab>
<mat-tab label="Tab 5"></mat-tab>
</mat-tab-group>
<br>
<button mat-raised-button color="primary" (click)="goToTab3()">Change Tab</button>
Run Code Online (Sandbox Code Playgroud)
与各自班级
export class AppComponent {
tabIndex = 0;
goToTab3() {
this.tabIndex = (this.tabIndex + 1) % 5;
}
informChange(tabIndex:number) {
console.log(tabIndex);
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是,每次单击按钮时选项卡都会发生变化,但附加到该事件的事件处理程序selectedIndexChange不应被执行。
因此,我需要区分选项卡单击(在这种情况下我确实希望selectedIndexChange触发)和代码所做的更改(本例中的按钮,但可能是来自其他部分的更改,例如 store/redux 更改)在这种情况下,我不想selectedIndexChange触发,而只想更改选定的选项卡。
我刚刚升级到 ngrx/store 版本 8。我注意到 ng 更新已经删除了所有 storeFreeze 的出现。也将其从metaReducer 中删除。
所以我的问题是 -为什么?
在 ngrx 8 中使用 storeFreeze 是否有问题?
在 ngrx8 之前:
import { ActionReducerMap, MetaReducer } from '@ngrx/store';
import { storeFreeze } from 'ngrx-store-freeze';
import * as fromGroupMember from './group-member.reducer';
import * as fromDirectoryForm from './directory-filter-form.reducer';
export const metaReducers: MetaReducer<IState>[] =
(localStorage && localStorage.getItem('production') === 'false') ? [storeFreeze] : [];
Run Code Online (Sandbox Code Playgroud)
后:
import { ActionReducerMap, MetaReducer } from '@ngrx/store';
import * as fromGroupMember from './group-member.reducer';
import * as fromDirectoryForm from …Run Code Online (Sandbox Code Playgroud) angular ×6
ngrx ×3
ngrx-store ×2
angular5 ×1
angular8 ×1
css ×1
next.js ×1
ngrx-effects ×1
reactjs ×1
typescript ×1