2016-04-07 28 views
1

ui-selectに単純なリストがあり、アイテムを削除してリストの最初の要素をロードすると、モデルに関連付けられていません更新しました。私が紛失しているものがわからない! UI選択のUI-Selectは削除後にモデルを更新しません

定義:

<ui-select on-select="loadSelected($item)" ng-model="selectedDude"> 
    <ui-select-match placeholder="{{selectedDude.name}}"> 
     <span> {{selectedDude.name}} </span> 
    </ui-select-match> 
    <ui-select-choices repeat="d in data | filter: $select.search"> 
     <span ng-bind-html="d.name | highlight: $select.search"></span> 
    </ui-select-choices> 
    </ui-select> 

この機能は、私が削除のために使用していますいずれかになります。任意の助け

$scope.deleteSelected= function(){ 
      $scope.data.splice($scope.data.indexOf($scope.selectedDude),1); 
      $scope.selectedDude = $scope.data[0]; 
     }; 

Check the example in plunker 感謝。

答えて

2

plunkrを修正しました。 https://plnkr.co/edit/rCKCng6ecXiZ8cNGTBlz?p=preview

まず、私はオブジェクトのリストから項目を削除するにはArrayに小さなユーティリティメソッドを追加し、2つの問題がありました

Array.prototype.remove = function(key, value) { 
    var index = -1; 
    angular.forEach(this, function(item, i) { 
     if (item[key] === value) { 
      index = i; 
     } 
    }); 

    if (index > -1) { 
     this.splice(index, 1); 
     return true; 
    } 
    return false; 
}; 

、最初のものは、あなたからselectedDudeを削除し、どのように関連していましたオブジェクトの配列

$scope.data.splice($scope.data.indexOf($scope.selectedDude), 1); 

アレイに記憶されている男のオブジェクト参照インスタンスがスコープ変数selectedDudeが有するものと異なるかもしれないので。したがって、何かを変更すると、spliceは常に正しく動作しない可能性があります。

したがって、索引でユーティリティーメソッドを使用して検索することで、それを削除します。

第2の問題は、ネストされた子スコープの問題でした。詳細はhereをご参照ください。この問題は、オブジェクトdataStoreを作成し、dataStore.selectedDudeのようなオブジェクトからselectedDudeを参照して、Javascriptで子の継承の問題を防ぐことで解決しました。

関連する問題