2017-05-13 9 views
0

AngularJS)

<select data-ng-model='selectedTagForNew' ng-change="selectedTagForNewChange()" > 
     <option ng-value="{{tag.arrayindex}}" data-ng-repeat="tag in tags |orderBy:'seq'">{{tag.seq}}&nbsp;{{tag.name}}&nbsp;({{tag.number}})</option> 
    </select> 

特定のアクションの私のコントローラでは、私は配列から選択された要素を削除します。

tags.splice($scope.selectedTagForNew,1); 
    for(i=0;i<tags.length;i++){ 
      tags[i].arrayindex=i; 
    } 
    $scope.tags=tags; 

問題は、いつも最初のslice()の後に配列の最後の要素が選択された場合、$scope.selectedTagForNewundefinedとなります。結果としてtags[$scope.selectedTagForNew]nullです。リストにも表示されています。 何が間違っていますか?

UPDATE:多くのテストの後、そのNGリピートが更新されていないようですので、モデルの古い値が与えられる(tag.arrayindex

+0

コードの例を挙げてください。 jsfiddle/plunkr? –

+0

http://jsfiddle.net/HB7LU/29844/これは好きですが、そこには角度がありません.... – AlexP

+0

私はこのスタッフの中で新しいので、いくつかのエラーがばかだかもしれません。 – AlexP

答えて

0

でtypescriptです

const pos = this.tags.map(elem => { return tag._id; }).indexOf(tag._id); 
this.tags.splice(pos, 1); 

をスライスするためのより良い方法JavaScriptを使って拡張子を作ることができます

Array.prototype.spliceObject = function (sourceToRemove) { 
     //Remove the deleted entry from list 
     var index = this.indexOf(sourceToRemove); 
     if (index != -1) { // Make sure the value exists 
      this.splice(index, 1); 
     } 
    }; 

とtry

tags.spliceObject(selectedrow); 
0

HTMLの$インデックスを使用して配列のインデックスにアクセスします。参考:https://docs.angularjs.org/api/ng/directive/ngRepeat

オプションタグでng-repeatを使用する代わりに、angleで指定されたng-optionsディレクティブを使用できます。参照:https://docs.angularjs.org/api/ng/directive/ngOptions

+0

問題はng-repeatではなくスプライス()で、最初の要素がすべて破棄された後にのみ爆発します – AlexP

+0

$ indexは順序付けされた配列のインデックスを変更します配列 – AlexP

+0

オプションでng-valueの代わりにvalueを使用します。'