Angular JS - ng-repeat重复旧值

时间:2015-12-03 17:33:57

标签: javascript jquery angularjs

我是Angular JS的新手。我使用app和controller创建了一个角度代码。我要做的是在单击按钮时动态地将名称添加到数组中。

默认情况下,我的数组传递了两个值。当我给出一个输入并单击“添加”按钮时,它会首次添加该字符串。 但是当我给出另一个输入并再次单击add时,旧字符串将被新字符串替换,并且会再次添加新字符串。

以下是JSFiddle上的一段代码:http://jsfiddle.net/5DMjt/3680/

var demo= angular.module("demo",[]);
var simplecontroller = function($scope){
$scope.members = [{id:1,name:'prateek'},{id:2,name:'Ruchi'}];
$scope.addmember = function(newmember){
newmember.id = $scope.members.length+1;
$scope.members.push(newmeber);   
demo.controller(simplecontroller);
   }
} 

这是HTML代码:

<div ng-app="demo">
<div ng-controller="simplecontroller">
<ul>
  <li ng-repeat="member in members">{{member.id}}-{{member.name}}</li>
</ul> 
  Name<input type="Text" ng-model="inputmember.name">
</br><h2>
  {{inputmember}}
 </h2>
 <input type="button" value="Add" ng-click="addmember(inputmember)">

   </div>
 </div>

请帮助!

6 个答案:

答案 0 :(得分:2)

我分析的是push函数传递的地址就是为什么绑定仍然存在。你能做的就是传递值,就像我在下面做的那样 - :

 $scope.addmember = function(newmember){
  newmember.id = $scope.members.length+1;
    $scope.members.push({id:newmember.id,name:newmember.name});   
  demo.controller(simplecontroller);
  }

希望这能解决你的问题。快乐学习:)。

答案 1 :(得分:2)

您有两种选择。

每次我不建议你重新初始化它。

另一个是,用值传递参数。

$scope.members.push({id:newmember.id,name:newmember.name}); 

:)

答案 2 :(得分:1)

请参阅此更新的小提琴:http://jsfiddle.net/5DMjt/3689/

  Name<input type="Text" ng-model="newname">

这为您提供了范围变量newname

<input type="button" value="Add" ng-click="addmember()">

addmember函数使用此newname创建新对象并将其添加到列表中:

$scope.addmember = function(){
  var newmember = {};
  newmember.id = $scope.members.length+1;
  newmember.name = $scope.newname;
  $scope.members.push(newmember);  
}

答案 3 :(得分:0)

您遇到语法错误。有关详细信息,请参阅控制台错 您的变量 inputmember 未在任何位置定义。 此外,您需要推送到对象的数组新引用,因此每次键入值时,数组中的旧引用都不会更改。 这是一个工作版本。

http://jsfiddle.net/a9zvgm8k/

$scope.addmember = function(newMember){
    newMember.id = $scope.members.length+1;

    $scope.members.push(angular.extend({}, newMember));   
    demo.controller(simplecontroller);
}

答案 4 :(得分:0)

https://www.npmjs.com/package/mongoose-relationship ##Many-To-Many with Multiple paths var mongoose = require("mongoose"), Schema = mongoose.Schema, relationship = require("mongoose-relationship"); var ParentSchema = new Schema({ children:[{ type:Schema.ObjectId, ref:"Child" }] }); var Parent = mongoose.models("Parent", ParentSchema); var OtherParentSchema = new Schema({ children:[{ type:Schema.ObjectId, ref:"Child" }] }); var OtherParent = mongoose.models("OtherParent", OtherParentSchema); var ChildSchema = new Schema({ parents: [{ type:Schema.ObjectId, ref:"Parent", childPath:"children" }] otherParents: [{ type:Schema.ObjectId, ref:"OtherParent", childPath:"children" }] }); ChildSchema.plugin(relationship, { relationshipPathName:['parents', 'otherParents'] }); var Child = mongoose.models("Child", ChildSchema) var parent = new Parent({}); parent.save(); var otherParent = new OtherParent({}); otherParent.save(); var child = new Child({}); child.parents.push(parent); child.otherParents.push(otherParent); child.save() //both parent and otherParent children property will now contain the child's id child.remove()

解决:http://jsfiddle.net/5DMjt/3693/

答案 5 :(得分:0)

在推送到$ scope.members之前,您需要创建一个新对象并使用输入中的id和name填充它。