Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度上的可观察/主体丢失订户_Javascript_Angular_Rxjs_Observable_Behaviorsubject - Fatal编程技术网

Javascript 角度上的可观察/主体丢失订户

Javascript 角度上的可观察/主体丢失订户,javascript,angular,rxjs,observable,behaviorsubject,Javascript,Angular,Rxjs,Observable,Behaviorsubject,我在类中使用静态变量来存储初始化的行为主题,以便在从服务器加载用户设置时提供默认值 (下面是一个简化的示例版本) loadFromServer()正按照预期工作,并且在第一个事件之后调用了AppSettings.currency.next(settings.currency)行。然而,有趣的是,在这一点上,AppSettings.currency.observables[]在先前填充时是空的 我的想法是,我们最初是不同实例的问题,但我使用了一个静态变量(甚至尝试了一个全局变量)来避免不同的实例

我在类中使用静态变量来存储初始化的
行为主题
,以便在从服务器加载用户设置时提供默认值

(下面是一个简化的示例版本)

loadFromServer()
正按照预期工作,并且在第一个事件之后调用了
AppSettings.currency.next(settings.currency)
行。然而,有趣的是,在这一点上,
AppSettings.currency.observables[]
在先前填充时是空的

我的想法是,我们最初是不同实例的问题,但我使用了一个静态变量(甚至尝试了一个全局变量)来避免不同的实例

这是当前的工作流

  • myComponent.constructor
    订阅
  • 该订阅启动,默认为“USD”
  • 将加载服务器数据,并调用
    AppSettings.currency.next(settings.currency)
  • ……然后……什么都没有
  • 我希望在第四部分中,在第1部分中订阅的观察家会再次被解雇,但事实并非如此,这使我荣耀的观察家成为一个常数(


    我错过了什么吗?

    嗯,我觉得不好意思

    我发现问题是由于我的
    import
    语句在文件引用上具有(错误的)文件后缀

    从导入{AppSettings}./settings
    .js

    当我在其他地方使用(正确的)

    从“/settings”导入{AppSettings};


    这导致WebPack编译了该类的两个版本,TypeScript和(编译的)Javascript版本,从而创建了两个不同的实例。我设法在某个地方看到了一个
    AppSettings\u 1
    ,这让我陷入了兔子洞,最终放弃了它。

    我觉得很不好意思

    我发现问题是由于我的
    import
    语句在文件引用上具有(错误的)文件后缀

    从导入{AppSettings}./settings
    .js

    当我在其他地方使用(正确的)

    从“/settings”导入{AppSettings};


    这导致WebPack编译该类的两个版本,TypeScript和(已编译)Javascript版本,从而创建了两个不同的实例。我设法在某个地方看到了一个
    AppSettings\u 1
    ,这让我陷入了兔子洞,最终放弃了它。

    是否有拼写错误?我看到了setting.loadFromServer。不应该是settings吗?这是一个拼写错误,但这个示例是我代码的总结版本,因为我刚刚写了一个正在运行的简略版本。是否有输入错误?我看到setting.loadFromServer。不应该是settings吗?这是一个输入错误,但示例是我代码的摘要版本,因为我刚刚在运行中编写了一个简略版本。
    @Injectable
    export class AppSettings {
       // Using a static to globalize our variable to get 
       // around different instances making lots of requests.
       static readonly currency: Subject<string> = new BehaviorSubject('USD');
    
       // Return a property for general consumption, but using
       // a global/static variable to ensure we only call once. 
       get currency(): Observable<string> { return AppSettings.currency; }
    
    
       loadFromServer():any {
          // Broadcast the currency once we get back 
          // our settings data from the server.
          this.someService.getSettings().subscribe(settings => {
             // this is called lastly, but AppSettings.currency.observers
             // seems to show as an empty array in the Inspector?? 
             AppSettings.currency.next(settings.currency);
          });
       }
    }
    
    export class myComponent {
       public currency: string;
    
       constructor(settings: AppSettings) {
           // Called once with the default 'USD'
           settings.currency.subscribe(currency => {
               // only gets here once, before loadFromServer
               console.log(currency);
               this.currency = currency;
           });
    
           // Load from the server and have our subscription
           // update our Currency property.
           settings.loadFromServer();
       }
    }