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

时间:2015-08-20 07:25:28

标签: javascript angularjs

在我的AngularJS应用程序中,我有一个更新表单,可以让用户发布更新。发布更新按预期工作,我的JSON文件立即更新。当用户按下保存更新按钮时,我希望应用程序返回到主页面,然后我使用class Child extends Parent { constructor(a,b,c){ super(a,b,c); this.doMyStuff(); } }

主页面由我的数据服务接收的数据组成,但在提交表单后应用程序返回主页面时,不会更新此数据。如果我再次按F5,它将更新数据,但我想在应用程序返回主页后立即更新数据。

由于$window.location.href将根据我读过的information重新加载页面,我期望用$ window.location更改位置也会刷新数据。但就目前而言,在我的申请中似乎并非如此。

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

表单控制器:

$window.location.href

主页面控制器

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";
    }
});

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我同意您应使用$location.path()代替$window.location.href。一旦您在服务中保存数据,即保存功能的callback,也会重定向您的页面。

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

如果没有,请使用$scope.apply()保存数据,如果您收到与$digest()相关的错误,请按照以下代码进行操作。

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

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

我希望这会对你有所帮助。 感谢

答案 2 :(得分:-1)

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