Angular 10从秋田商店查询时未检测到更改
很可能我的秋田店设置不正确,但我已经非常仔细地遵循了文档 我将一些Angular 10从秋田商店查询时未检测到更改,angular,typescript,angular-akita,Angular,Typescript,Angular Akita,很可能我的秋田店设置不正确,但我已经非常仔细地遵循了文档 我将一些routerLinks设置为从商店动态填充(应用程序行为取决于用户导航时更新路由) 在返回从中派生新路由的应用程序状态的订阅中,如果我将返回的对象分配给我的组件参数,我会得到可怕的表达式changedafterithasbeencheckeederror 奇怪的是,如果我在订阅中为该属性分配一个静态对象,我不会得到错误(但该值是静态的,不是我需要的) 我能够让它与.detectChanges()一起工作,但我的印象是秋田为我们处理
routerLink
s设置为从商店动态填充(应用程序行为取决于用户导航时更新路由)
在返回从中派生新路由的应用程序状态的订阅中,如果我将返回的对象分配给我的组件参数,我会得到可怕的表达式changedafterithasbeencheckeederror
奇怪的是,如果我在订阅中为该属性分配一个静态对象,我不会得到错误(但该值是静态的,不是我需要的)
我能够让它与.detectChanges()
一起工作,但我的印象是秋田为我们处理更改检测,所以我非常困惑(并且不希望每次我订阅商店查询时都必须手动检测更改)
工作代码(在导航栏中):
设置状态的代码(在其中一个可导航组件中):
query.ts:
import { Injectable } from '@angular/core';
import { Query } from "@datorama/akita";
import { AppState, AppStore } from './store'
@Injectable({providedIn: 'root'})
export class AppQuery extends Query<AppState> {
constructor(private appStore: AppStore){
super(appStore)
}
appState$ = this.select();
}
}
ngOnInit(): void {
this.route.params.subscribe(
(params: Params) => {
this.slug = params['slug'] ? params['slug'] : '';
this.appService.updateTab('activeRosterSlug',this.slug);
}
)
}
import { Injectable } from '@angular/core';
import { Query } from "@datorama/akita";
import { AppState, AppStore } from './store'
@Injectable({providedIn: 'root'})
export class AppQuery extends Query<AppState> {
constructor(private appStore: AppStore){
super(appStore)
}
appState$ = this.select();
}
}
import { Injectable } from '@angular/core';
import { Store, StoreConfig } from '@datorama/akita';
export type AppState = {
activeRosterSlug: string,
activeMatchSlug: string;
activeEventSlug: string;
activeManifestSlug: string;
maximixed: boolean;
footerExp: boolean;
}
export const getInitialState = () => {
return{
activeRosterSlug: '',
activeMatchSlug: '',
activeEventSlug: '',
activeManifestSlug: '',
maximixed: false,
footerExp: false
}
}
@Injectable({providedIn: 'root'})
@StoreConfig({name: 'appStore'})
export class AppStore extends Store<AppState> {
constructor(){
super(getInitialState())
}
}
import { Injectable } from '@angular/core';
import { AppStore } from './store';
@Injectable({providedIn: 'root'})
export class AppService {
constructor(private appStore: AppStore) {}
updateTab(tabName: string, tabId) {
let update = {}
update[tabName] = tabId;
this.appStore.update(update);
}
}