Angularjs $ route.reload()不起作用

时间:2014-05-04 18:02:09

标签: javascript angularjs twitter-bootstrap

我有一个有角度的应用程序,我正在尝试刷新页面。我按照许多帖子中的建议尝试$route.reload()。但我无法让它工作(Chrome给我一个错误)。这是我的控制器:

var app = angular.module('StudentProgram', ['ngRoute', 'ui.bootstrap', 'jsonService']);

        app.controller('mycontroller', function($route, RequirementsService, DegreesService, DegreeCategoriesService, DetailsService, ProgramsService, $scope, $modal, $log, $http) {
          ProgramsService.getItems(function(data){
        $scope.programs  = data;
        console.log(data);
      });

          $scope.addDegree = function(degree) {
            var variablesToSend =   {
                                       "acad_program_type": degree.acad_program_type,
                                            "program_title": degree.program_title, 

                                        }
                                    }
            $http.post('/api/studentacademicprogram/', variablesToSend).then(function(response){
                console.log(response);
                alert('post added');
                $route.reload();
            }, function(response){
                console.log(response);
                alert('post not added');
            });
          };

这是我访问该功能的div:

<div ng-show="display.academicdegrees" class="col-lg-8 col-md-8 col-sm-8">
                <div class="panel panel-warning list-group list-unstyled" data-spy="scroll" data-target="#panelcategory" data-offset="0" style="max-height:400px;overflow:auto;position:relative;">
                    <div class="panel-heading">
                        {% verbatim %}
                        <h3 class="panel-title">{{DegreeCategory}}</h3>
                        {% endverbatim %}
                    </div>

                </div>
            </div>

我在哪里犯这个错误?当我点击刷新按钮时页面会刷新,但是当我调用该功能时它不会发生。

5 个答案:

答案 0 :(得分:5)

使用

$ window.location.reload()而不是 $ route.reload()

这应该解决。

答案 1 :(得分:1)

您必须确保在index.html中包含angular-route.js(或缩小版本)才能在模块中使用ngRoute。

答案 2 :(得分:1)

使用$route.reload()您应该注意到$route取决于$location$routeParams,因此您必须在控制器中注入主题。 (reference

答案 3 :(得分:0)

如果要将其添加到列表中,您不想刷新页面,则将其推送到ng-repeat重新排列的阵列。在代码中执行此操作的好地方是成功回调,以便将资源添加到后端。

答案 4 :(得分:0)

app.factory('safeApply', [function($rootScope) {
    return function($scope, fn) {
        var phase = $scope.$root.$$phase;
        if(phase == '$apply' || phase == '$digest') {
            if (fn) {
                $scope.$eval(fn);
            }
        } else {
            if (fn) {
                $scope.$apply(fn);
            } else {
                $scope.$apply();
            }
        }
    }
}]);

/*you have to use above created factory below your $route.reload();

Just Refer Below*/

 $http.post('/api/studentacademicprogram/', variablesToSend).then(function(response){
                console.log(response);
                alert('post added');
                $route.reload();
                safeApply($scope);
}

/*As the scope is not being watched properly this issue happens */