【问题标题】:angular2 add items dependig on selected value角度 2 根据所选值添加项目
【发布时间】:2017-09-30 16:14:27
【问题描述】:

大家好,我是 Angular2 和 Ionic2 的新手。 我尽量使用它们的所有功能。

我想根据 div 本身之前的选择值动态填充 div。

这将是 html

<ion-item>
  <ion-label>Num of trips</ion-label>
  <ion-select [(ngModel)]="tripNum" (ngModelChange)="doTrips()">
    <ion-option value="1">1</ion-option>
    <ion-option value="2">2</ion-option>
    <ion-option value="3">3</ion-option>
  </ion-select>
  <ng-container *ngIf="tripNum"> //?? not sure about what in here.. 
    <div *ngFor="let trip of trips">
      <ion-item>
        <ion-label>Trip {{trip}}</ion-label>
      </ion-item>
    </div>
  </ng-container>
</ion-item>

我创建了一个Trips接口,声明为trips:Trips[]

export interface Trips {
  duration : string;
  nofservices : number;
}

“doTrips()”函数应该根据tripNum 向trips[] 数组添加尽可能多的Trips。然后在我看来,*ngfor 应该添加与trips 数组包含的一样多的项目,并最终通过[(ngModel)] 将trip 属性绑定到html。

希望问题很清楚.. 我对使用什么有点困惑

【问题讨论】:

  • 这是什么legnum
  • 原来是老名字,右边是tripNum,也就是ion-select中选中的值
  • 好的 :) 您能否将函数 doTrips 添加到您的问题中,我会看看您的代码 :)
  • 什么是legs和legsnum?
  • 我不知道从哪里开始......我想像 doTrips(){ this.trips = []; for (let i of this.tripNum) { this.trips.push({duration:"",nofservices:0}); i++}} 但我不知道如何动态地让它添加到 dom 并绑定到视图

标签: angular ionic2 ngfor


【解决方案1】:

您已经在使用ngModelChange,因此不需要双向绑定。 [(ngModel)][ngModel]="tripNum" (ngModelChange)="doTrips($event)" 的缩写,因此您可以使用它。

您还需要将ng-container 移出ion-item 以使您的代码正常工作。所以你的模板应该是这样的:

<ion-item>
  <ion-label>Num of trips</ion-label>
  <ion-select [ngModel]="tripNum" (ngModelChange)="doTrips($event)">
    <ion-option value="1">1</ion-option>
    <ion-option value="2">2</ion-option>
    <ion-option value="3">3</ion-option>
  </ion-select>
</ion-item>


<ng-container *ngIf="tripNum"> 
  <div *ngFor="let trip of trips">
    <ion-item>
      <ion-label>Trip </ion-label>
    </ion-item>
  </div>
</ng-container>

doTrips-function 看起来像这样:

doTrips(tripNum: number) {
  // declare obj of type Trips
  let obj = <Trips>{}
  // loop to add number of objects based on the value of tripNum
  for(let i= 1; i<=tripNum; i++) {
    this.trips.push(obj);
  }
  this.tripNum = tripNum;
}

现在我们必须记住,添加的每个对象都只是Trips 类型的空对象,因此模板中实际上没有要显示的值。但如果您愿意/需要,您可以在 doTrips 函数中赋值。

终于DEMO


更新:

现在我从评论中看到您想将默认值添加到 nofservices,因此您的函数将如下所示:

doTrips(tripNum: number) {
  // loop to add number of objects based on the value of tripNum
  for(let i= 1; i<=tripNum; i++) {
    this.trips.push(<Trips>{duration:'',nofservices:0});
  }
  this.tripNum = tripNum;
}

请注意,您需要在模板中为您的trip 添加属性名称,如下所示:

<ion-label>Trip {{trip.nofservices}}</ion-label>

【讨论】:

  • 到目前为止还没有尝试过,但它应该是我正在寻找的。实际上,在 ngcontainer 内部,我想添加更多选择来填充 Trips[] 的值(这是疑问关于数据绑定,我需要将来自 *ngfor 的每个项目绑定到 Trips[] 的每个对象。
  • 现在不太了解您要查找的内容...并且您的问题中没有提及..
  • 我必须稍微努力才能达到我会再次被卡住的地步eheh
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多