Javascript AngularJS只提交脏字段

Javascript AngularJS只提交脏字段,javascript,angularjs,Javascript,Angularjs,我想知道是否有办法只提交$dirty字段的表单,目前我正在使用ng change手动将每个字段添加到更改请求中。但问题是,它不是很可重用的 在form.html中 <input name="status" id="status" ng-model="campaign.status" ng-change="change('status')"> 我正在寻找一种更好的方法来实现这一点,例如不使用updates变量。对于表单中的每个字段,都有一个属性$dirty。提交表单时,您可以遍历字段

我想知道是否有办法只提交
$dirty
字段的表单,目前我正在使用
ng change
手动将每个字段添加到更改请求中。但问题是,它不是很可重用的

在form.html中

<input name="status" id="status" ng-model="campaign.status" ng-change="change('status')">

我正在寻找一种更好的方法来实现这一点,例如不使用
updates
变量。

对于表单中的每个字段,都有一个属性
$dirty
。提交表单时,您可以遍历字段并选择那些
$dirty


请尝试
console.log($scope.formName.status)
检查这些属性。

对于表单中的每个字段,都有一个属性
$dirty
。提交表单时,您可以遍历字段并选择那些
$dirty


请尝试
console.log($scope.formName.status)
检查这些属性。

对于表单中的每个字段,都有一个属性
$dirty
。提交表单时,您可以遍历字段并选择那些
$dirty


请尝试
console.log($scope.formName.status)
检查这些属性。

对于表单中的每个字段,都有一个属性
$dirty
。提交表单时,您可以遍历字段并选择那些
$dirty


请尝试
console.log($scope.formName.status)
检查这些属性。

您也可以在每个字段都变脏之前使其无效:


发送

您也可以使其无效,直到每个字段都变脏:


发送

您也可以使其无效,直到每个字段都变脏:


发送

您也可以使其无效,直到每个字段都变脏:


发送

我觉得您只想发送已更新的字段。我不太清楚原因是什么,但如果您想要解决的问题只是提交更改的值,我想建议另一种方法

如果您可以使用像lodash或下划线这样的库,我的建议是在提交之前对原始副本和当前的
$scope.magnities
实例进行区分

原因如下:

  • $scope.$watch
    的侦听器功能不够灵活,无法轻松用于创建
    $scope.updates
    对象

  • 表单的
    $dirty
    状态将有点脆弱,因为
    $dirty
    属性要求使用表单字段的name属性,而不是
    ng model
    属性的名称。这可能会导致命名冲突,并且往往不是很便于移植或更新

如果您使用lodash,您可能会执行以下操作:

//as soon as you create $scope.campaign, copy it to $scope.original
$scope.original = angular.copy($scope.campaign);

//in your update function
$scope.updates = _.pick($scope.campaign, function(value, key, object){ return $scope.campaign[key] != $scope.original[key] });

Campaign.update({id: $scope.campaign.id}, $scope.updates).$promise.then(function () {
        // success
    }, function () {
        //error
    });


我觉得您只想发送已更新的字段。我不太清楚原因是什么,但如果您想要解决的问题只是提交更改的值,我想建议另一种方法

如果您可以使用像lodash或下划线这样的库,我的建议是在提交之前对原始副本和当前的
$scope.magnities
实例进行区分

原因如下:

  • $scope.$watch
    的侦听器功能不够灵活,无法轻松用于创建
    $scope.updates
    对象

  • 表单的
    $dirty
    状态将有点脆弱,因为
    $dirty
    属性要求使用表单字段的name属性,而不是
    ng model
    属性的名称。这可能会导致命名冲突,并且往往不是很便于移植或更新

如果您使用lodash,您可能会执行以下操作:

//as soon as you create $scope.campaign, copy it to $scope.original
$scope.original = angular.copy($scope.campaign);

//in your update function
$scope.updates = _.pick($scope.campaign, function(value, key, object){ return $scope.campaign[key] != $scope.original[key] });

Campaign.update({id: $scope.campaign.id}, $scope.updates).$promise.then(function () {
        // success
    }, function () {
        //error
    });


我觉得您只想发送已更新的字段。我不太清楚原因是什么,但如果您想要解决的问题只是提交更改的值,我想建议另一种方法

如果您可以使用像lodash或下划线这样的库,我的建议是在提交之前对原始副本和当前的
$scope.magnities
实例进行区分

原因如下:

  • $scope.$watch
    的侦听器功能不够灵活,无法轻松用于创建
    $scope.updates
    对象

  • 表单的
    $dirty
    状态将有点脆弱,因为
    $dirty
    属性要求使用表单字段的name属性,而不是
    ng model
    属性的名称。这可能会导致命名冲突,并且往往不是很便于移植或更新

如果您使用lodash,您可能会执行以下操作:

//as soon as you create $scope.campaign, copy it to $scope.original
$scope.original = angular.copy($scope.campaign);

//in your update function
$scope.updates = _.pick($scope.campaign, function(value, key, object){ return $scope.campaign[key] != $scope.original[key] });

Campaign.update({id: $scope.campaign.id}, $scope.updates).$promise.then(function () {
        // success
    }, function () {
        //error
    });


我觉得您只想发送已更新的字段。我不太清楚原因是什么,但如果您想要解决的问题只是提交更改的值,我想建议另一种方法

如果您可以使用像lodash或下划线这样的库,我的建议是在提交之前对原始副本和当前的
$scope.magnities
实例进行区分

原因如下:

  • $scope.$watch
    的侦听器功能不够灵活,无法轻松用于创建
    $scope.updates
    对象

  • 表单的
    $dirty
    状态将有点脆弱,因为
    $dirty
    属性要求使用表单字段的name属性,而不是
    ng model
    属性的名称。这可能会导致命名冲突,并且往往不是很便于移植或更新

如果你使用lodash,你可能会做一些