- ngrx devtools 使用时,当配置了需要编译检查错误如:
import { NgModule } from '@angular/core';
import { StoreModule } from '@ngrx/store';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { environment } from '../../environments/environment';
import { agentReducer } from './reducers/agent.reducer';
@NgModule({
declarations: [],
imports: [
StoreModule.forRoot({ agent: agentReducer }, {
// runtimeChecks: {
// strictStateImmutability: true,
// strictActionImmutability: true,
// strictStateSerializability: true,
// strictActionSerializability: true,
// }
}),
StoreDevtoolsModule.instrument({
maxAge: 20,
logOnly: environment.production
})
]
})
export class AppStoreModule { }
就算在外层逻辑中修改了store里的相同名字的变量,也会报错,错误信息如:
core.js:6014 ERROR TypeError: Cannot assign to read only property '1' of object '[object Array]' at Array.splice (<anonymous>)
关闭编译检查就能work了 = =
- ngrx reducer的处理逻辑
- ”散布运算符仅执行浅复制,而不处理深层嵌套的对象。您需要复制对象中的每个级别以确保不变性。“
constructor & ngOnit的区别
- 无论您是否在TypeScript类中实现它,在创建类的实例时仍会调用它。这是因为将Typescript类构造函数转换为JavaScript构造函数:
- constructor 会被强制调用 而ngOnit只会在实现方法的时候被调用
- @Input通信机制是作为后续更改检测阶段的一部分进行处理的,因此输入绑定在构造函数中不可用。 当Angular开始更改检测时,将构建组件树,并已调用树中所有组件的构造函数。同样在这一点上,每个组件的模板节点都添加到DOM中。在这里,您可以获得初始化组件可能需要的所有数据-DI提供程序,DOM和输入绑定。
- 当Angular调用ngOnInit时,它已经完成了组件DOM的创建,并通过构造函数和已处理的输入绑定注入了所有必需的依赖项。因此,这里您具有所有必需的信息,这使它成为执行初始化逻辑的好地方
- It’s a common practice to use
ngOnInit
to perform initialization logic even if this logic doesn’t depend on DI, DOM or input bindings.
后端代理的跨域问题