如何从angularjs表单提交中省略属性?

如何从angularjs表单提交中省略属性?,angularjs,Angularjs,我有一个视图,它从我的服务器调用一个表单模型,其中包括一个下拉列表 当我提交表格时,下拉列表中的所有状态也会提交。在只需要状态id的情况下发回这些值似乎很愚蠢。如果一个表单有多个下拉列表,那么这个问题就更加复杂了。我还注意到,我的from模型中包含的任何属性也会被提交,即使它没有包含在我的表单中。这似乎根本不对 我如何在提交时省略不属于我表格的某些属性? 我的模型如下所示: { "id":25, "name":"joe smith", "dummyProperty":

我有一个视图,它从我的服务器调用一个表单模型,其中包括一个下拉列表

当我提交表格时,下拉列表中的所有状态也会提交。在只需要状态id的情况下发回这些值似乎很愚蠢。如果一个表单有多个下拉列表,那么这个问题就更加复杂了。我还注意到,我的from模型中包含的任何属性也会被提交,即使它没有包含在我的表单中。这似乎根本不对

我如何在提交时省略不属于我表格的某些属性?

我的模型如下所示:

{
    "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,而是来自你的模型。状态列表不应该在项目中,而是在范围的独立对象中。该项应该只包含必须发送到服务器的输入数据。我大体上同意,但在某些情况下,您最终会多次调用服务器来填充少数下拉列表。如果您试图重用具有不同模型的控制器,这也会变得更加复杂。我必须开始考虑单独的对象,否则就没有可重用的控制器。我认为一次返回对象的所有相关属性更经济,尤其是对于具有多种形式的大型项目。这是我能忍受的轻微刺激物。再次感谢。