2016-04-07 45 views
1

我在ui-select中有一個簡單的列表,如果我選擇刪除一個項目,並加載列表中第一個可用的元素,則關聯的模型不會得到更新。不知道我錯過了什麼!用戶界面選的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添加一個小工具的方法從對象列表中刪除項目:

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可能無法正常工作,因爲您在其中更改了任何內容。

因此,我們通過索引(使用實用程序方法)來精確刪除它。

第二個問題是嵌套的子範圍。閱讀here瞭解更多信息。我們通過創建對象dataStore並引用selectedDude(如dataStore.selectedDude)來解決此問題,以防止Javascript中的子代繼承問題。