angular routing .otherwise重置服务变量?

时间:2016-05-18 13:46:43

标签: angularjs routing

我正在使用服务来存储数组,以便在路由时可以访问。

它适用于我的两条路线:

$routeProvider
        .when('/main',{
            templateUrl: '/templates/main.html',
            controller: 'MainController'
        })
        .when('/print', {
            templateUrl: '/templates/print.html',
            //template: '<div> {{ x }}</div>',
            controller: 'PrintController'
        })
        .otherwise({
            redirectTo: '/main',
        });

所以我可以在/ main和/ print之间切换,所有数据都可用。

但是当我转到任何其他URL(因此触发.otherwise)时,数据会丢失。我打印数组的长度,它是'0'(只是为了确保它实际上已经消失)。

我知道服务是在应用期间保留的,所以我希望MyService.myArray可以通过路由保存。

供参考,这是MainController的相关部分:

// pulls .json file (recipes) from dropbox
// when we return from the dropbox auth call we will have a "code" variable in the URL
if($routeParams.code){
        // get dropbox token using the code
        dropbox.getToken($routeParams.code).then(function(token){
        // getting the actual file from dropbox
        dropbox.pullRecipes().then(function(data){
            $scope.recipes = data; // assigne it tot he controller scope
            dropbox.recipesArray = data; // set it on the dropbox factory so it's available to other controllers
            console.log("Recipes successfully pulled from dropbox: "+$scope.recipes.length); 
        });
        }, function(err){
            console.log("Errors aquiring the token");
            console.log (err);
        });
    }


    // I'd expect this to be full, but it's actually empty
    $scope.recipes = dropbox.recipesArray;
    console.log(dropbox.recipesArray.length); // 0

1 个答案:

答案 0 :(得分:0)

原因如下:

在浏览器上输入URL时,应用程序会重新初始化,控制器和服务也是如此,因此所有数据都会丢失,需要再次拉出。