如何从angularjs表单提交中省略属性?
我有一个视图,它从我的服务器调用一个表单模型,其中包括一个下拉列表 当我提交表格时,下拉列表中的所有状态也会提交。在只需要状态id的情况下发回这些值似乎很愚蠢。如果一个表单有多个下拉列表,那么这个问题就更加复杂了。我还注意到,我的from模型中包含的任何属性也会被提交,即使它没有包含在我的表单中。这似乎根本不对 我如何在提交时省略不属于我表格的某些属性? 我的模型如下所示:如何从angularjs表单提交中省略属性?,angularjs,Angularjs,我有一个视图,它从我的服务器调用一个表单模型,其中包括一个下拉列表 当我提交表格时,下拉列表中的所有状态也会提交。在只需要状态id的情况下发回这些值似乎很愚蠢。如果一个表单有多个下拉列表,那么这个问题就更加复杂了。我还注意到,我的from模型中包含的任何属性也会被提交,即使它没有包含在我的表单中。这似乎根本不对 我如何在提交时省略不属于我表格的某些属性? 我的模型如下所示: { "id":25, "name":"joe smith", "dummyProperty":
{
"id":25,
"name":"joe smith",
"dummyProperty": "whatever",
"stateId":5,
"states":[
{"value":1, "label": "Alabama"},
{"value:2, "label": "Alaska"},
{etc...}
]
}
<form autocomplete="off" novalidate name="form">
<input type="hidden" ng-model="item.id" id="id" name="id" />
<div class="se-row">
<label>Name</label>
<input type="text" ng-model="item.name" id="name" name="name" />
</div>
<div class="se-row">
<label>State</state>
<select ng-model="item.stateId" id="stateId" name="stateId">
<option value="0">Select...</option>
<option value="{{o.value}}" ng-repeat="o in item.states">{{o.label}}</option>
</select>
</div>
<div class="se-row">
<button ng-disabled="form.$invalid" ng-click="postNew()" ng-class="{'disabled-btn': form.$invalid}">Save</button>
</div>
</form>
我的表单如下所示:
{
"id":25,
"name":"joe smith",
"dummyProperty": "whatever",
"stateId":5,
"states":[
{"value":1, "label": "Alabama"},
{"value:2, "label": "Alaska"},
{etc...}
]
}
<form autocomplete="off" novalidate name="form">
<input type="hidden" ng-model="item.id" id="id" name="id" />
<div class="se-row">
<label>Name</label>
<input type="text" ng-model="item.name" id="name" name="name" />
</div>
<div class="se-row">
<label>State</state>
<select ng-model="item.stateId" id="stateId" name="stateId">
<option value="0">Select...</option>
<option value="{{o.value}}" ng-repeat="o in item.states">{{o.label}}</option>
</select>
</div>
<div class="se-row">
<button ng-disabled="form.$invalid" ng-click="postNew()" ng-class="{'disabled-btn': form.$invalid}">Save</button>
</div>
</form>
我的工厂相当标准:
TabsApp.factory('ApiFactory', function ($resource, $http, $q, $rootScope) {
var apiService = {
List: $resource('/api/patient/:patientId/:ctrl', { patientId: '@patientId', ctrl: '@ctrl' }),
Crud: $resource('/api/:ctrl/:id', { ctrl: '@ctrl', id: '@id' }, { update: { method: 'PUT' } })
};
//I set my url parameters here and then broadcast them down to child scopes
return apiService;
});
编辑2
我还尝试使用ngSubmit,它具有与我上面描述的相同的行为。表单仍然提交所有州,甚至dummyProperty
<form ng-submit="postNew()">
//same as above
<button type="submit">Save</button>
</form>
//同上
拯救
您能否添加postNew()的实现?您是否尝试过在ApiFactory.Crud.save…
之前删除$scope.item.states,该操作有效。谢谢如果使用不同型号的控制器,则很难重复使用。我理解angular是关于模型的,只是基于“正常”标准的表单提交只提交表单中的内容。在本例中,angular的声明性咒语有一个例外。好消息是您找到了解决问题的方法。我只是想警告你,我不认为问题来自AngularJS,而是来自你的模型。状态列表不应该在项目中,而是在范围的独立对象中。该项应该只包含必须发送到服务器的输入数据。我大体上同意,但在某些情况下,您最终会多次调用服务器来填充少数下拉列表。如果您试图重用具有不同模型的控制器,这也会变得更加复杂。我必须开始考虑单独的对象,否则就没有可重用的控制器。我认为一次返回对象的所有相关属性更经济,尤其是对于具有多种形式的大型项目。这是我能忍受的轻微刺激物。再次感谢。