【问题标题】:Angularjs - Reloading a routeAngularjs - 重新加载路线
【发布时间】:2013-01-17 01:46:44
【问题描述】:

如果“某事”发生,是否可以重新加载某个路线?

示例:
每次触发这个功能,我都需要用新的ID重新加载路由

$scope.updateDealer = function(zip, country) {
        if(zip) {
            $http.get('files/framework/dealer/near/'+ zip + '/' + country + '').success(function(data) {
                $scope.dealer = {marker: data};
                $location.path('/dealer/:id').search({id: data.id});
                $rootScope.dealerdetails = data;    
                $route.reload();
        });
        } else {
            $scope.dealer = $scope.loadall();
        }

  }  

路线

when('/dealer/:id', {templateUrl: 'files/tpl/dealer-details.html?26', controller: 'DealerDetailsCtrl', activetab: 'details'}).  

但不知何故,ID 不在 DealerDetailsCtrl 中。

这是对 DealerDetailsCtrl 中数据的调用:

$rootScope.dealerdetails = dealerService.api.get({id: $routeParams.id, token: $scope.token})  

$routeParams.id 似乎是空的,因此内容没有加载。

感谢您的帮助。

【问题讨论】:

  • 而不是$route.reload() 使用与您的路线匹配的适当参数调用window.location.href 不是更容易吗?
  • 你能在问题代码中添加一个 jsFiddle 的 Plunker 以便我们看一下吗?另外,为什么你需要“重新加载”你当前的路由,而不是仅仅通过绑定刷新你的内容?
  • window.location.href 是不可能的,因为内容正在打开的覆盖 div 中加载。该网站必须免费“重新加载”......“重新加载()”只是一个尝试。

标签: javascript location angularjs routes


【解决方案1】:

如果您访问 /dealer/1(或任何实际的 id),是否为您定义了 $routeParams.id?您所要做的就是:

    $scope.updateDealer = function(zip, country) {
        if(zip) {
            $http.get('files/framework/dealer/near/'+ zip + '/' + country + '').success(function(data) {
                $scope.dealer = {marker: data};
                $rootScope.dealerdetails = data;
                $location.path('/dealer/' + data.id);
            });
        } else {
            $scope.dealer = $scope.loadall();
        }
  }

【讨论】:

    【解决方案2】:

    从 Angular 1.3 开始,您可以使用 $route.updateParams(newParams) 更改路由参数。

    Here is a quote from the angular docs...

    $route.updateParams(newParams);

    导致$route 服务更新当前 URL,将当前路由参数替换为指定的参数 在newParams。提供与路由路径匹配的属性名称 段定义将被插入到位置的路径中, 而其余的属性将被视为查询参数。

    在你的情况下,你应该使用这样的东西:

    $scope.updateDealer = function(zip, country) {
         if(zip) {
             $http.get('files/framework/dealer/near/'+ zip + '/' + country + '').success(function(data) {
                 $scope.dealer = {marker: data};    
                 $route.updateParams({id: data.id});
             });
         } else {
             $scope.dealer = $scope.loadall();
         }
    }
    

    【讨论】:

    • 但是请注意,一旦路由参数更新,当前的DealerDetailsCtrl 控制器和作用域将被销毁并重新实例化。所以,如果$scope.updateDealerDealerDetailsCtrl 中定义(我无法从你的问题中弄清楚)$scope.dealer 会迷路。您可能必须将其保存到更高的范围或使用服务。
    【解决方案3】:

    这应该可以解决问题,因为 Angular 监控哈希更改会适当地路由它们:

    window.location.hash = 'dealer/data.id';
    

    【讨论】:

    • 请提供答案!
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2020-05-26
    • 2014-03-20
    相关资源
    最近更新 更多