【发布时间】:2016-03-12 08:48:32
【问题描述】:
你好,
所以我从 Python 返回一个字典,然后在将它传递给 Angular 之前对其进行 jsonify 处理。
例如,这是我从 Python 返回的字典:
the_dict = {"success": False, excludedPkgs: ['12345', '45678'], message:'Failed to depart pkgs'}
return jsonfiy(the_dict)
此字典包含状态、排除包列表和错误消息。
结果通过 dataFactory 函数返回给 Angular,如果状态为 False,则更新 $sessionStorage
departedFromPackages: function(ids, user_id){
$http({
method: 'POST',
url: urlBase + 'depart/pkg/',
data: {'order_id': ids, 'user': user_id}
}).then(function(res){
if (res.data.success == false) {
$storage.failedPkgs = res.data.excludedPkgs;
}
});
}
现在在我的 Packages 控制器中,我自动获取 $storage.failedPkgs 并设置了 $scope.$watchCollection,我希望它会自动在控制台中显示更新的值:
包控制器
$scope.failedPkgs = dataFactory.getFailedPkgs();
$scope.$watchCollection('failedPkgs', function (newVal, oldVal){
console.log(newVal, oldVal)
});
现在,问题是当您加载 packages.html 屏幕时控制台最初显示未定义,这是有道理的。用户必须单击一个已离开的按钮,该按钮将尝试离开一个包,这基本上意味着获取包信息并将其注入数据库表中。
但是,如果您尝试离开已经离开的包裹,SQLAlchemy 将返回完整性错误,因为您无法将重复的订单放入数据库。
那是上面的字典返回 False 状态和失败包列表的时候。
我说了这么多,$scope.failedPkgs 只会在您重新加载屏幕后显示更新的值。
所以我的问题是,我如何获得角度来立即更新 $scope.failedPkgs 而无需重新加载页面?还是必须每次都重新加载?
**** 更新 ****
当我在 POST 请求中控制 res.data.excludedPkgs 时,它会立即显示更新后的值,但控制器在重新加载之前看不到该值:
departedFromPackages: function(ids, user_id){
$http({
method: 'POST',
url: urlBase + 'depart/pkg/',
data: {'order_id': ids, 'user': user_id}
}).then(function(res){
if (res.data.success == false) {
console.log(res.data.excludedPkgs)
$storage.failedPkgs = res.data.excludedPkgs;
console.log($storage.failedPkgs)
}
});
}
[1222822, 1222826, 1222819]
**** 更新 ****
这是返回 $storage.failedPkgs 的函数
getFailedPkgs: function(){
return $storage.failedPkgs;
},
**** 更新 ****
这是通过 onClick 事件为离开按钮调用的函数:
$scope.departed = function() {
var selectedRows = [];
$('.select-row-cb').each(function(){
if ($(this).is(':checked')) {
selectedRows.push($(this).val());
}
});
if (selectedRows.length > 0) {
showProgressDialogueBox('Departing Package');
if (selectedRows.length == $scope.dataTable.data().length) {
// All packages in wave are selected; Generate the entire wave
$scope.allPkgDeparted = 1
dataFactory.departedFromWaves($scope.waveid, $scope.user);
} else {
dataFactory.departedFromPackages(selectedRows, $scope.user);
}
}
}
【问题讨论】:
-
用户点击离开按钮后,您是否进行任何视图更改?
-
还没有。一旦我可以立即更新值,我将使用 $scope.failedPkgs 显示一个显示 pkgs 失败的弹出框
-
那我还没有完全理解这个问题。你能解释一下这部分问题吗..
will only show the updated values AFTER you click back in the browser and then go back to the page -
道歉。我的意思是,如果您重新加载页面,您将通过控制台看到更新的 $scope.failedPkgs 值。这不是对 $scope.failedPkgs 的即时更新。
-
您尝试在 if 语句内的 $http 帖子中添加
console.log(res.data.excludedPkgs)以验证 $storage 中的值是否在发布时更新。如果这是更新,您可以编写更多代码来更新控制器$scope变量中的值failedPkgs从$storage. failedPkgs..
标签: javascript python angularjs dictionary