AngularJS表单输入:如何基于$ scope设置默认值但绑定到新表单模型

时间:2013-02-23 17:05:02

标签: forms input angularjs

使用node,mongoDB和amp;构建CMS angularjs。我有一个带有输入的编辑表单,我想绑定到$ scope,因此它们的值用现有数据填充。例如:

<form ng-submit="editArticle(article._id, article)" class="edit-form">
    <label for="hed">Hed: <input type="text" name="hed" ng-model="article.hed" value="{{article.hed}}" /></label>
    <label for="dek">Dek: <input type="text" name="dek" ng-model="article.dek" placeholder="{{article.dek}}" /></label>
    <input type="submit" value="Save Changes"></input>
</form>

使用我的mongo数据库中的当前数据适当填充输入值。但是,我想绑定到一个新的表单范围,因此它不会尝试传入文章范围中的每个值,只是传递表单中的新范围。 (文章范围目前包含Mongo文章文档中的每个字段。如果我传递了所有这些数据,我会收到有关无效模式的错误,因为它也试图传入__v字段。)

理想情况下,我想这样做:

<form ng-submit="editArticle(article._id, form)" class="edit-form">
    <label for="hed">Hed: <input type="text" name="hed" ng-model="form.hed" value="{{article.hed}}" /></label>
    <label for="dek">Dek: <input type="text" name="dek" ng-model="form.dek" placeholder="{{article.dek}}" /></label>
    <input type="submit" value="Save Changes"></input>
</form>

因此,在提交时,它只将form.hed和form.dek传递给我的数据库。但是,现在这些输入字段是空白的,因为它们未绑定到原始文章数据。用户必须使用原始值重新填充每个字段。有没有办法绑定到多个模型orrrr绑定到当前模型,但在提交时只发送更新的表单数据?

修改

看起来我必须将ng-change属性添加到每个字段,用原始范围填充输入字段,然后在更改时,将表单范围设置为等于更改的值。例如。

<form ng-submit="editArticle(article._id, form)" class="edit-form">
    <label for="hed">Hed: <input type="text" name="hed" ng-change(form.article = article.hed) ng-model="article.hed" /></label>
    <label for="dek">Dek: <input type="text" name="dek" ng-change(form.dek = article.dek) ng-model="article.dek" placeholder="{{article.dek}}" /></label>
    <input type="submit" value="Save Changes"></input>
</form>

我不确定这个解决方案有多激动,但它确实有效。如果有人知道更有效的方法来实现这一点,请告诉我!

1 个答案:

答案 0 :(得分:1)

从数据库接收原始对象(或部分对象)并将其绑定到原始对象时,请复制该对象。

在编辑之前复制对象是一个非常好的模式,因为它允许您轻松提供其他功能,如还原编辑和禁用保存按钮,如果没有进行编辑。