代码之家  ›  专栏  ›  技术社区  ›  methuselah

无法读取null的属性“subscribe”

  •  0
  • methuselah  · 技术社区  · 5 年前

      getDefaultNavbarStyle(templateId): any {
        let template = null;
        switch (templateId) {
          case ActiveTemplates.Default:
            this.httpClient.get(this.DEFAULT_TEMPLATE_PATH).subscribe(response => {
              template = response;
            });
            break;
          case ActiveTemplates.Quick:
            this.httpClient.get(this.QUICK_TEMPLATE_PATH).subscribe(response => {
              template = response;
            });
            break;
          case ActiveTemplates.Front:
            this.httpClient.get(this.FRONT_TEMPLATE_PATH).subscribe(response => {
              template = response;
            });
            break;
          default:
            break;
        }
        return template;
      }
    

    this.defaultNavbarStyleSubscription = this.builderNavbarService.getDefaultNavbarStyle(this.navbarTemplate).subscribe(response => {
      if (response) {
        this.defaultNavbarStyle = response;
      }
    });
    

    但是,我不断得到以下错误:

    ERROR TypeError: Cannot read property 'subscribe' of null
    

    我能做些什么来修复它?我已将模板初始化为null,但在switch语句中设置了它的值。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Ling Vu    5 年前

    通过使用一种方法来发出请求,您通常会返回 Observable<any> 以呼叫者身份订阅:

    更改为:

    方法:

    getDefaultNavbarStyle(templateId): Observable<any> {
        switch (templateId) {
          case ActiveTemplates.Default:
            return this.httpClient.get(this.DEFAULT_TEMPLATE_PATH)
          case ActiveTemplates.Quick:
            return this.httpClient.get(this.QUICK_TEMPLATE_PATH)
          case ActiveTemplates.Front:
            return this.httpClient.get(this.FRONT_TEMPLATE_PATH)
        }
      }
    

    呼叫者:

    this.defaultNavbarStyleSubscription = this.builderNavbarService.getDefaultNavbarStyle(this.navbarTemplate).subscribe(response => { this.defaultNavbarStyle = response; });
    
        2
  •  1
  •   Andrei    5 年前

    只需添加 template =

    case ActiveTemplates.Default:
        return this.httpClient.get(this.DEFAULT_TEMPLATE_PATH);
    case ActiveTemplates.Quick:
        return ...