2015-09-06 162 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();