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

时间:2015-09-06 21:41:45

标签: angularjs

完成CodeSchool的AngularJS课程后,我试图回过头来使用我学到的东西来构建一个简单的待办事项应用程序。我已经将它添加到列表中,但是在我使用输入后我无法清除文本输入字段。这是我的JSFiddle

具体来说,这是我的addComment()功能:

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

相应的Angular 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中的值对页面没有影响。我做错了什么?

3 个答案:

答案 0 :(得分:2)

  

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

这种推理不正确。 JavaScript中的所有内容都由对象引用传递。请参阅此问题:Is JavaScript a pass-by-reference or pass-by-value language?

使用对象替换原始字符串可能会为您买一些可供性。但是,无论它是字符串还是对象(实际上,字符串 是一个对象!),newComment = someValue将无法工作。

相反,您需要在对象上设置text 属性。这不会创建新对象,只是修改属性,因此保留了引用。试试这个:

newComment.text = '';

答案 1 :(得分:1)

试试这个:

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

您正在做的是在作用域上创建一个新对象并破坏在原始对象上设置的绑定。通过仅更新text属性,您可以保持绑定完整,并实现清除绑定输入字段的目标。

答案 2 :(得分:0)

您可以休息一张可能符合您要求的表格

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