2016-12-13 6 views
1

私は、フィールドが互いに依存するフォームを持っていて、UI Bootstrapを使って表示しています。ブートストラップの先読みからチームを選択すると、第2の先読みで選択できる選手のリストが入力されます。ユーザーがチームを変更すると、プレイヤーのリストをリロードし、現在選択されているプレーヤーの値をクリアします。

プレーヤーのオプションはチームに基づいて正しく読み込まれていますが、クリックすると先読みオプションが表示されないという問題があります。$ viewValueが奇妙な状態にあり、一致しない既存のオプションのいずれか。目に見えない選択肢の1つと一致する文字を入力すると、一致する値が取得され、入力されたものをすべてクリアすると、完全なリストが復元されます。

$ viewValueを正しくリセットする必要があると思われ、プレーヤモデルに$setViewValue$render()を試してみましたが、どこにも手を出せませんでした。

<div class="options"> 
Team: <input type="text" 
      name="team" 
      placeholder="Select team" 
      ng-model="selectedTeam" 
      uib-typeahead="team as team.name for team in league | filter:$viewValue" 
      typeahead-editable="false" 
      typeahead-min-length="0" 
      class="form-control"> 
</div> 

<div class="options"> 
<input type="text" 
     name="player" 
     placeholder="Select player" 
     ng-model="selectedPlayer" 
     uib-typeahead="player as player.name for player in players | filter:$viewValue" 
     typeahead-editable="false" 
     typeahead-min-length="0" 
     class="form-control"> 
</div> 

チームの変更を探し、プレーヤーのオプションと選択した値をリセットコントローラ:

$scope.$watch('selectedTeam.id', function(newTeamID) { 

    // clears any currently selected player ng-model 
    $scope.selectedPlayer = null; 

    if (!newTeamID) 
    { 
     return; 
    } 

    // sets up the list of available players 
    $scope.pullPlayers(newTeamID); 

}); 

全plunkrはhere可能です。あなたはこのような何かをしたいかもしれないコントローラからplayers先行入力値をリセットするには

答えて

2

$scope.$watch('selectedTeam.id', function(newTeamID) { 
    if (!newTeamID) 
    { 
     $scope.players = []; 
     $scope.teamForm.player.$setViewValue(''); 
     $scope.teamForm.player.$render(); 
     return; 
    } 

    // sets up the list of available players 
    $scope.pullPlayers(newTeamID); 
    }); 

ここではforked plunker

+1

は間違いなく私の簡素化plunkr例で働いています。もう少し複雑な私の実際のコードにこれを適用しようとしています(2つのリストを駆動します - どちらか一方はうまく動作し、もう一方は変な動作です)。今すぐ掘り起こす – Danny

+0

私は2つの依存リスト(「選手」と「コーチ」と言う)を持ち、メインオプション(チーム)をクリアすると、先行オプションの1つが前のオプションで開きます。オプションがクリアされました)。私はそれをplunkrで複製することはできません。もしそうすれば、私は新しい質問をします。しかし、これは私の元の問題を修正しました。明らかに、新しい値を設定するのではなく、ドライバリストをクリアするときに$ setViewValueがうまく機能しました。 – Danny

関連する問題