AngularJS - 发送到服务器的旧属性值

时间:2015-04-21 13:36:01

标签: javascript angularjs

我在AngularJS中有以下控制器:

$scope.model = null;
$scope.load = function() {
     $http.get(someUrl).success(function (data) {
                $scope.model = data;
     }
}

$scope.save = function() {
      $http.post(url, $scope.model)
           .success(function (data) {
                // some handle
            }).error(function () {
                 // some handle
            });
}

模型方案:

$scope.model.PayDate === "2015-04-29T22:00:00.000Z"
// deserialized from request, date is in ASP.NET format

接下来,PayDate道具附加到某个控件(通过ng-model),该控件在javascript DateTime类中设置新日期。 因此,在发送到服务器之前更改PayDate的值如下所示:

value

不幸的是,当请求发送到服务器时,PayDate的值是旧值:

val

为什么发送PayDate的旧值而不是模型中存储的当前值?

修改 解决方法是在发送之前将JS日期转换为字符串:

$scope.model.PayDate = moment($scope.model.PayDate ).format("YYYY-MM-DD");
$scope.save();

然后,在请求中发送新值。

当然,我想解决问题,而不是在发布之前将每个日期字段转换为字符串。

3 个答案:

答案 0 :(得分:0)

也许尝试在控制器中注入$ timeout。 因此,超时首先执行摘要周期,然后发布您的数据..

$scope.save = function() {
  $timeout(function(){
    $http.post(url, $scope.model)
       .success(function (data) {
            // some handle
        }).error(function () {
             // some handle
        });
    });
};

这会解决您的问题吗?

答案 1 :(得分:0)

我认为问题在于您的指令是使用自己的变量创建子作用域,而不会修改父作用域。您可以使用相同的情况检查this answer

** JS String update **后更新**

来自documentation

  

使用ng-model

     

angular-bootstrap-datetimepicker指令需要ng-model和   选择的日期/时间将自动与模型同步   值。

     

该指令也可以很好地与验证指令一起使用,例如   NG-必需的。

     

angular-bootstrap-datetimepicker指令存储并期望   模型值为标准javascript日期对象

尝试使用DateObject而不是String

所以,而不是

$scope.model.PayDate === "2015-04-29T22:00:00.000Z";

使用

$scope.model.PayDate === new Date("2015-04-29T22:00:00.000Z");

答案 2 :(得分:0)

我认为您所处的时区存在问题(波兰UTC + 2?)

您正在处理当前TimeZone GMT + 2中的Javascript Date 所以你会看到Thu Apr 30 2015 00:00:00 GMT+0200但是一旦它将它发送回服务器,它将作为ISOString发送

new Date("2015-04-29T22:00:00.000Z")

输出:Thu Apr 30 2015 00:00:00 GMT+0200 (YOUR TIMEZONE)

new Date("2015-04-29T22:00:00.000Z").toISOString()

输出:"2015-04-29T22:00:00.000Z"

所以那两个日期实际上是相同的