我在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
的值如下所示:
不幸的是,当请求发送到服务器时,PayDate
的值是旧值:
为什么发送PayDate
的旧值而不是模型中存储的当前值?
修改 解决方法是在发送之前将JS日期转换为字符串:
$scope.model.PayDate = moment($scope.model.PayDate ).format("YYYY-MM-DD");
$scope.save();
然后,在请求中发送新值。
当然,我想解决问题,而不是在发布之前将每个日期字段转换为字符串。
答案 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 **后更新**
使用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"
所以那两个日期实际上是相同的