簡體   English   中英

AngularJs route.reload(); 無限循環

[英]AngularJs route.reload(); infinite loops

我是AngularJS的新手,我得到了一些Drupal生成的Jsonp文件。 當我試圖在我的視圖上顯示文章的信息時,我的問題就來了。

<!-- Script JS -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
<script src="http://code.angularjs.org/1.2.14/angular-sanitize.js"></script>
<script src="http://code.angularjs.org/1.2.14/angular-route.js"></script>
<script src="http://code.angularjs.org/1.2.14/angular-resource.js"></script>

<script>
// mon module app contient les module de Route et de Sanitize 
var app = angular.module('app', ['ngSanitize', 'ngRoute', 'ngResource'])


// systeme de routing
app.config(function($routeProvider){
    $routeProvider
        .when('/home', {templateUrl: 'partials/home.html', controller: 'contentsCtrl'})
        .when('/test/:nid', {templateUrl: 'partials/test.html', controller: 'contentsCtrl'})
        .otherwise({redirectTo : '/'});
})

app.factory('ContentFactory', function($http, $q){
    var factory = {
        contents : false,
        resource : $http.jsonp('http://achahada.fr/json/articles/node.jsonp?callback=JSON_CALLBACK'),//objet recourse qui me permettra de changer la source de mon json en fonction de l'id demander
        getContents : function(){
            var deferred = $q.defer();
            factory.resource
                .success(function(data, status){
                    factory.contents = data;
                    deferred.resolve(factory.contents);
                })
                .error(function(data, status){
                    deferred.reject('Impossible de récupérer les articles');
                });
            return deferred.promise;
        },
        getContent : function(nid){
            var content = {};
            var deferred = $q.defer();
            angular.forEach(factory.contents, function(value, key){
                if(value.nid == nid){
                    //si il y a un nid alors la source de mon content sera le fichier json assortie a celui-ci
                    factory.resource = $http.jsonp('http://achahada.fr/json/articles/node/'+nid+'.jsonp?callback=JSON_CALLBACK');
                    factory.resource
                    .success(function(data, status){
                        factory.contents = data;
                        deferred.resolve(factory.contents);
                    })
                    .error(function(data, status){
                        deferred.reject('Impossible de récupérer les articles');
                    });
                    return deferred.promise;
                    content = value;
                }
            });
            return content;
        },
    }
    return factory;
})


app.controller('contentsCtrl', function ($scope, ContentFactory, $routeParams, $route){
        $scope.loading = true; // affichera un message de chargement
        var content = ContentFactory.getContent($routeParams.nid);
        //$scope.reload = $route.reload();
        $scope.contents = ContentFactory.getContents().then(function(contents){
                $scope.loading = false; // dès qu'on a finie de charger on arrete le chargement
                $scope.contents = contents;
            }, function(msg){
                alert(msg);
            })

});


</script>

當我想通過我的鏈接partials / test:nid.html獲得文章時,我成功了,其中nid =文章的id。 但是,如果我想看到另一個,什么也不會發生。 所以我嘗試了$ route.reload(); 但是那給我帶來了無限的請求循環。

一些幫助請

問題是您正在調用 $route.reload函數並將結果添加到$scope 我假設您真正想要的是將$route.reload函數本身添加到$scope 您需要將代碼更改為以下之一:

$scope.reload = $route.reload;

$scope.reload = function(){ $route.reload(); };

將$ route.reload放在$ routeChangeSuccess中

$rootScope.$on('$routeChangeSuccess', function() {
    $route.reload();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM