如何在使用$window.location更改位置后获得更新的($scope)数据

How to get updated ($scope) data after changing location with $window.location

本文关键字:更新 数据 scope window location 位置      更新时间:2023-09-26

在我的AngularJS应用程序中,我有一个更新表单,它将允许用户发布更新。发布更新工作如预期和我的JSON文件被立即更新。当用户按下保存更新按钮时,我希望应用程序返回到主页面,为此我使用$window.location.href

主页由我的data-service接收的数据组成,但是当应用程序提交表单后返回主页时,这些数据不会更新。如果我再次按F5,它将更新数据,但我希望在应用程序返回到主页面后立即更新数据。

由于$window.location.href将根据我所读取的信息重新加载页面,因此我期望使用$window更改位置。Location也会刷新数据。但是现在,在我的应用程序中似乎不是这样。

有没有办法在不手动刷新页面的情况下获得主页面的信息?

形式控制器:

myDash.controller("dbNewUpdateCtrl", function($scope, $window, dbDataService){
    //Save + Cancel
    $scope.updateSave = function (item) {
        dbDataService.saveUpdate(item);
        $window.location.href = "#/dashboard";
    }
    $scope.updateCancel = function () {
        $window.location.href = "#/dashboard";
    }
});

Main Page Controller

myDash.controller("dbOverviewCtrl", function($scope, $routeParams, dbDataService){
    $scope.items = dbDataService.getData();
});

如果您使用的是ngRoute模块,则使用$location.path()方法。它将自动将所有更改应用到$scope .

如果您没有使用它,那么在更改位置之前,通过调用作用域的$scope.$apply()方法手动应用更改。

我同意你应该使用$location.path()而不是$window.location.href。也重定向你的页面,一旦你保存数据的服务,即在callback的保存功能。

您可以通过在主页控制器中添加断点来检查页面重定向后得到的结果。如果您从服务中获得正确的数据,则检查数据是否设置为$scope.items

如果没有,请使用$scope.apply()来保存数据,如果你得到$digest()相关的错误,然后按照下面的代码。

$timeout(function(){
   $scope.items = dbTestService.getData();
},0);

此代码将更新$scope.items的值。

我希望这对你有帮助。由于

你应该避免窗口位置href,因为它有点打破了spa的逻辑。数据保存在哪里?可能在dbDataService中?您应该在将数据发送到数据库后重新获取它。