2015-09-06 166 views
2

完成CodeSchool的AngularJS课程后,我试着回过头来学习如何构建一个简单的待办事项应用程序。我已经将它添加到可以将条目添加到列表的位置,但是在使用输入后我无法清除文本输入字段。这是我的JSFiddle在处理完输入后清除文本输入字段

具体而言,这里是我的addComment()功能:

card.addComment = function(newComment) { 
    card.comments.push(newComment.text); 
    newComment = {text: ""}; 
}; 

和相应的角HTML:

<form ng-submit="card.addComment(newComment)"> 
    <input name="comment" placeholder="Add comment" ng-model="newComment.text"> 
</form> 

起初我是路过的数据作为一个字符串(的<input ng-model="newComment">代替newComment.text),但那么我记得字符串通过值传递,而不是通过引用。我认为newComment在函数中被空白,但没有通过Angular传递回文档。但即使在我将newComment更改为对象以便通过引用传递后,它也没有什么区别 - 清除JavaScript中的值对页面没有影响。我究竟做错了什么?

回答

1

试试这个:

card.addComment = function(newComment) { 
    card.comments.push(newComment.text); 
    newComment.text = ""; 
}; 

你在做什么是创建于范围的新对象,并打破这是建立在原来的对象上的约束力。通过仅更新text属性,可以使绑定保持完整,并实现清除绑定到的输入字段的目标。

+0

此问题发生OP没有遵循原型继承的规则正确http://stackoverflow.com/questions形式/ 14049480 /什么是细微差别原型原型继承in-angularjs再次声明对象将为该属性创建一个新的对象..原型继承失败,在这种情况下 –

+0

干杯Pankaj,将阅读在那。 –

+0

更好,你在你的答案中加入..我试图编辑你的答案几次...但在你之间编辑它.. –

2

我记得字符串通过值传递,而不是通过引用。

这条推理不正确。 JavaScript中的所有内容都通过了对象引用。看到这个问题:Is JavaScript a pass-by-reference or pass-by-value language?

与对象更换原始字符串并可能买你一些启示,虽然。但是,不管它是一个字符串还是一个对象(实际上,一个字符串是一个对象!!),newComment = someValue将永远不会工作。

相反,您需要在对象上设置text属性。这不会创建一个新的对象,它只是修改一个属性,所以引用被保留。试试这个:

newComment.text = ''; 
0

可以休息可能你需要什么

document.getElementById("myForm").reset();