【问题标题】:async else / Angular is not working as expectedasync else / Angular 未按预期工作
【发布时间】:2018-05-29 10:51:39
【问题描述】:

我有一个如下所示的代码。它在 ngIf 用例上运行良好。但是else 用例存在问题。也就是说,它显示 else 部分并突然消失,而 observable 没有任何变化。换句话说,数据没有变化。你能告诉我为什么吗?如何避免?

这是它现在的行为:

html

 <ion-list radio-group [(ngModel)]="budgetGroup" *ngIf="budgetGroups$ | async; let bg;else loading">
        <ion-item-sliding *ngFor="let b of bg | orderByBudgetGroup">
          <ion-item>
            <ion-label>{{b.name }}</ion-label>
            <ion-radio [value]="b.id" (ionSelect)="selectedBudgetGroup(b)"></ion-radio>
          </ion-item>
          <ion-item-options side="right">
            <button ion-button (click)="editBudgetGroup(b)" color="primary">
              <ion-icon name="ios-create-outline"></ion-icon>
            </button>
            <button ion-button (click)="deleteBudgetGroup(b)" color="danger">
              <ion-icon name="ios-trash-outline"></ion-icon>
            </button>
          </ion-item-options>
        </ion-item-sliding>
        <ion-item>
        </ion-item>
      </ion-list>

     <ng-template #loading>
        <ion-grid>
          <ion-row class="header">
          </ion-row>
          <ion-row class="footer">
            <ion-col col-12 class="font-size-14" text-center>
              <div>
                <P class="margin-bottom-0">No Budget Group. You can create them by </P>
                <p class="margin-top-0">tapping the “+” button above</p>
              </div>
            </ion-col>
          </ion-row>
        </ion-grid>
      </ng-template>

.ts

budgetGroups$: Observable<BudgetGroup[]>;budgetGroup: string;

 ionViewDidLoad() {
    this.budgetGroups$ = this.budgetGroupProvider.getAllBudgetGroups().valueChanges();
 }

service.ts

  getAllBudgetGroups(): AngularFirestoreCollection<BudgetGroup> {
    return this.budgetGroupCollectionRef = this.fireStore.collection(`userProfile/${this.userId}/budgetGroup`);
  }

【问题讨论】:

  • [(ngModel)]="budgetGroup" 来自哪里?您将不得不在模板中的任何地方使用异步
  • 请查看ts文件@SurajRao的更新
  • 可以有getAllBudgetGroups的代码吗?我不明白你为什么有.valueChanges 而不仅仅是this.budgetGroups$ = this.budgetGroupProvider.getAllBudgetGroups()
  • 请看更新@mickaelw

标签: angular typescript rxjs observable ionic3


【解决方案1】:

代码

<ion-list radio-group [(ngModel)]="budgetGroup" 
*ngIf="(budgetGroups$ | async)[0]; let bg;else loading">

【讨论】:

  • 它给出了这个错误SelectBudgetGroupPage.html:17 ERROR TypeError: Cannot read property '0' of null at Object.eval [as updateDirectives] (SelectBudgetGroupPage.html:67) at Object.debugUpdateDirectives [as updateDirectives] (core.js:14338) at checkAndUpdateView (core.js:13507) at callViewAction (core.js:13857) at execComponentViewsAction (core.js:13789) at checkAndUpdateView (core.js:13513) at callViewAction (core.js:13857) at execEmbeddedViewsAction (core.js:13815) at checkAndUpdateView (core.js:13508) at callViewAction (core.js:13857)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2020-03-11
  • 1970-01-01
  • 2020-02-19
  • 2019-04-15
  • 2018-08-24
相关资源
最近更新 更多