2017-03-24 18 views
0

私は、テーブルを作成するために、angluar2とTypeScriptを使用しています。同じ行の<td><select>をどのようにして独立させるかを理解できませんでした。私のコードでは、ユーザーは任意の列からオプションを選択できます。ユーザーがオプションを選択すると、同じ行のすべての列が更新されます。AngularJS - ng-ifの1つの要素を更新すると、すべての要素が更新されます。

<!-- 
    public _tableHeaders: Array of Object; 
    public _rosters: Array of Object; 
    public _dutyOptions: Array of Object; 
--> 

<div class="row"> 
    <table class="table"> 
    <thead> 
     <tr> 
     <th style="width:55px" *ngIf="_tableHeaders"></th> 
     <!-- col for 'name'--> 
     <th style="width:10px" *ngFor="let hdr of _tableHeaders"> 
      <div>{{hdr.DayOfMonth}}</div> 
      <div>{{hdr.DayOfWeek}}</div> 
     </tr> 
    </thead> 
    <tbody> 
     <tr *ngFor="let rosterList of _rosters"> 
     <template ngFor let-roster="$implicit" [ngForOf]="rosterList"> 
      <td *ngIf="roster.Switch == 'n'" style="width:55px">{{roster.DutyOption}}</td> 
      <td *ngIf="roster.Switch == 'c'" style="width:55px">{{roster.DutyOption}}</td> 
      <td *ngIf="roster.Switch == 'p'" style="width:10px">{{roster.DutyOption}}</td> 
      <td *ngIf="roster.Switch == 'u' && roster.UserId != _userId" style="width:10px">{{roster.DutyOption}}</td> 
      <td *ngIf="roster.Switch == 'u' && roster.UserId == _userId" style="width:10px"> 
      <select class="form-control input-sm" [ngModel]="_selDutyOption" (ngModelChange)="updateUserRequest($event, roster)"> 
       <option></option> 
       <option *ngFor="let dutyOption of _dutyOptions; let j=index" (ngValue)="dutyOption" [selected]="dutyOption.Id === roster.DutyOptionId ? true : false">{{dutyOption.Description}}</option> 
      </select> 
      </td> 
     </template> 
     </tr> 
    </tbody> 
    </table> 
</div> 
+0

"*同じ行の各​​は、どういう意味ですかは独立していますか?"これは、CSSではなくAngularで何かをしようとしているように聞こえます。 –

+0

テーブルの各行に複数の列があります。各列には1つの「選択/オプション」が含まれています。各「選択/オプション」は他のものと一意でなければなりません。 「選択/オプション」のいずれかからアイテムを選択すると、残りの「選択/オプション」が更新されます。しかし、それは起こるべきではありません。残りの「選択/オプション」は、元の選択された値を保持する必要があります。 – Paul

答えて

0

あなたが同じ値を持つすべてのselect要素に結合するためです:_selDutyOption、1を変更]を選択し、すべてが更新されます。

select要素ごとに異なるモデルを定義すると、問題が解決します。

+0

Pengyy、私はあなたが正しいと思います。しかし、私は動的に別のモデルを作成することができないか分からないので、私はそれを知ることができません。列と行を事前に指定します。 – Paul

+0

@Paul配列を作成し、* ngFor式にインデックスを追加してから、array [index]をselect要素にバインドすることができます。または、_rostersの各項目に_selDutyOptionを追加し、ngModelによってselect要素をroster._selDutyOptionにバインドする別の方法があります。 – Pengyy

+0

私は、ロスタクラス[ngModel] = "roster.SelValue"に追加フィールドを追加してオプション2を実装しました。すべての列の '選択/オプション'の表示が正しくなりました。しかし、新しい項目が選択された列である新しい問題が発生し、ディスプレイから削除されます。右からすべての列が左に移動しました。 – Paul

関連する問題