1

使用 node、mongoDB 和 angularjs 构建一个 CMS。我有一个编辑表单,其中包含要绑定到 $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 传递给我的数据库。但是,现在这些输入字段为空白,因为它们未绑定到原始文章数据。用户必须用原始值重新填写每个字段。有没有办法绑定到多个模型或绑定到当前模型,但在提交时只发送更新的表单数据?

编辑:

看起来我必须向每个字段添加 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>

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

4

1 回答 1

1

在从 DB 接收原始对象(或其中的一部分)时复制原始对象(或其中的一部分)并将您的 from 绑定到它。

在编辑之前处理对象是一种非常好的模式,因为它允许您轻松提供额外的功能,例如恢复编辑并在未进行编辑时禁用保存按钮。

于 2013-02-23T17:27:33.647 回答