Angularjs 处理输入后清除文本输入字段

Angularjs 处理输入后清除文本输入字段,angularjs,Angularjs,在完成了CodeSchool的AngularJS课程后,我正试图回顾并使用我所学到的知识构建一个简单的待办应用程序。我已经到了可以向列表中添加条目的地步,但在使用输入后无法清除文本输入字段。这是我的 具体来说,下面是我的addComment()函数: card.addComment = function(newComment) { card.comments.push(newComment.text); newComment = {text: ""}; }; 以及相应的角度HTML:

在完成了CodeSchool的AngularJS课程后,我正试图回顾并使用我所学到的知识构建一个简单的待办应用程序。我已经到了可以向列表中添加条目的地步,但在使用输入后无法清除文本输入字段。这是我的

具体来说,下面是我的
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>

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

试试这个:

card.addComment = function(newComment) {
  card.comments.push(newComment.text);
  newComment.text = "";
};
您要做的是在作用域上创建一个新对象,并破坏在原始对象上设置的绑定。通过仅更新
文本
属性,可以保持绑定不变,并实现清除绑定到的输入字段的目标

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

这种推理是不正确的。JavaScript中的所有内容都通过对象引用传递。见这个问题:

不过,用对象替换原始字符串可能会给您带来一些启示。然而,无论它是字符串还是对象(实际上,字符串就是对象!),
newComment=someValue
都不会起作用

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

newComment.text = '';

你可以休息一张表格,它可以满足你的需要

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

出现此问题OP没有遵循原型继承的规则正确地再次声明对象将为该属性创建新对象..在这种情况下原型继承失败,最好在回答中添加此问题..我尝试过几次编辑你的答案…但在编辑过程中..@pankajpark此问题与原型继承和作用域无关,它与JavaScript中的对象引用传递语义有关。我花了这么长时间研究这个问题,真不敢相信解决方案这么简单。谢谢你简单明了的解释。@AlexisKing我对它的理解很差。。谢谢你给我指明了正确的方向。:)