2016-08-08 7 views
1

ここに私のJSコードがあります。入力値を更新すると、angularJSの配列の対応する入力値がすべて更新されます

angular.module('myApp', []) 
.controller("myController", [function() { 
    this.master = []; 

    this.addUser = function(user) { 
       this.master.push(user) 
    }; 

    this.removeUser = function(user) { 
     var indexToRemove = this.master.indexOf(user); 
     this.master.splice(indexToRemove,1) 
    } 

    this.reset = function() { 
     this.user = this.master[this.master.length - 1]; 
    } 

}]) 

ここは私のHTML部分です。

<body ng-app="myApp" ng-controller="myController as Cntrl"> 
    <form> 
     Name: <input type="text" ng-model="user.name" /> <br /> 
     Email: <input type="email" ng-model="user.email" /> <br /> 
     Gender: <input type="radio" ng-model="user.gender" value="male" /> Male 
     <input type="radio" ng-model="user.gender" value="female" /> female <br /> <br /> 

     <input type="button" ng-click="Cntrl.addUser(user)" value="Add User"> 

     <input type="button" ng-click="Cntrl.reset()" value="Reset User"> 

    </form> 

    <div ng-repeat="users in Cntrl.master track by $index"> 
     <span ng-click="Cntrl.removeUser(users)" >X</span> <pre>{{users | json}}</pre> 

    </div> 

</body> 

新しいユーザーを追加して、選択したユーザーを削除できます。しかし、新しいユーザーを追加するたびに、アレイ内のすべての古いユーザーのプロパティが、新しく追加されたユーザーのプロパティで更新されています。

ここで間違いを説明してください。

答えて

0

、すべてのユーザーが同じものであり、より良い使用インデックスを削除し、配列に押し込まれ、 = "Cntrl.removeUser($インデックス)"

angular.module('myApp', []) 
 
    .controller("myController", [ 
 
    function() { 
 
     this.master = []; 
 
     this.user = this; 
 

 
     //use this.user 
 
     this.addUser = function() { 
 
     this.master.push(this.user) 
 
     this.user = {} 
 
     }; 
 

 
     //use index 
 
     this.removeUser = function(index) { 
 
     this.master.splice(indexToRemove, 1) 
 
     } 
 

 
     this.reset = function() { 
 
     this.user = this.master[this.master.length - 1]; 
 
     } 
 

 
    } 
 
    ])

0

は、あなたが与えているのNG-クリックマスター配列へのユーザー参照、および双方向データバインディングのために、あなたの値が更新され、これを試すことができます、動作します。

次のようにaddUserメソッドを変更してください。すでにあなたの質問に答える3件の投稿があったとして、オブジェクトのディープコピーを作成します

 this.addUser = function(user) { 
     this.master.push(angular.copy(user)); 
    }; 

角度のコピーは、ドキュメントhttps://docs.angularjs.org/api/ng/function/angular.copy

0

を参照してください。しかし、私は あなたのコードに実装しようとしているVM アプローチでいくつかの深刻な論理誤解があると推測します。プログラム が機能していますが、解決策を進める前にJohn Papaのチュートリアルを読むことを強くお勧めします。これにより、 のファンダメンタルズがクリアされ、なぜそれが動作していなかったのか理解できます。

https://johnpapa.net/angularjss-controller-as-and-the-vm-variable/

関連する問題