动态改变提供商的价值

时间:2019-09-25 10:33:08

标签: angular

import { NgModule} from '@angular/core';
export const my_custom_format{
var date_format=localStorage.getItem('date_format')
}
...

@NgModule({
  imports [
  ...
  ],
  declarations [
  ...
  ],
  entryComponents [
  ...
  ],
  providers [
  {provide: LOCALE_ID, useValue:date_format}
  ]
})

当我进入页面时,我的date_format从localStorage获取值。但是,如果我的locaLstorage中的项目发生更改,则date_format不会更新。该怎么做?

2 个答案:

答案 0 :(得分:0)

重要-这是一个骇客,我不知道它能否实现您想要的目的。我的猜测是您正在尝试将语言环境ID注入某些组件并在其中使用它们。

如果您尝试以这种方式更改语言,那么很抱歉,通过更改本地存储中的区域设置ID告诉您它不起作用。

您可以尝试以下操作(看看是否可行)

export class LocalStorage {
    public static get DateFormat() {
        return localStorage.getItem('date_format');
    }
}

以及提供者部分:

{provide: OWL_DATE_TIME_FORMATS, useValue:LocaleStorage.DateFormat}

答案 1 :(得分:0)

从角度来看,提供者是一个单例类,这意味着它们将被初始化一次,并且请求它的每个位置(组件等)将获得与初始化相同的实例。

我们了解了这一点,便可以了解您的情况。 LOCAL_ID的值用date_format的值初始化一次,从这里开始LOCAL_ID的值将不会随着对date_format的更改而更新。

您可以做的一件事是,在您想要的每个组件中都具有该提供程序,该提供程序将获得最新的date_format值。