我正在使用服务来存储数组,以便在路由时可以访问。
它适用于我的两条路线:
$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
答案 0 :(得分:0)
原因如下:
在浏览器上输入URL时,应用程序会重新初始化,控制器和服务也是如此,因此所有数据都会丢失,需要再次拉出。