Le code suivant indique, via un service et des spectacles sur la page web une liste de 'page' objets pour une page "catégorie" (chaîne de caractères). À l'aide de la détermination de l'objet de la propriété dans $routeProvider.lors de la(), je suis en mesure de reporter la mise à jour de la vue jusqu'à ce que la nouvelle valeur est prêt.
Deux questions:
Lors de la demande d'une nouvelle page de la liste, je veux montrer un chargement icône. Comment puis-je détecter (dans un non-hackish façon) l'événement lorsque la lecture à partir du serveur démarre (et le chargement de l'icône doit être affiché)? Je suppose que je pourrais faire quelque chose comme $('.les pages de chargement icône").show() dans le service, mais trouver que trop gui dépendante trop placé dans le service.
Lorsque la nouvelle valeur est prêt, je voudrais que le vieux à s'estomper et que la nouvelle fondu. Qu'est-ce que le "angulaire" façon de faire cela? J'ai essayé de le faire dans le contrôleur à l'aide de $regarder, mais qui entraîne la nouvelle valeur à afficher peu de temps avant le fadeout commence.
Le code:
app.js:
$routeProvider.when('/:cat', { templateUrl: 'partials/view.html', controller: RouteCtrl, resolve: RouteCtrl.resolve});
controllers.js:
function RouteCtrl($scope, $routeParams, pages) {
$scope.params = $routeParams;
$scope.pages = pages;
}
RouteCtrl.resolve={
pages: function($routeParams, Pages){
if($routeParams.hasOwnProperty('cat')){
return Pages.query($routeParams.cat);
}
}
}
services.js: Les dernières pages de lecture est stocké dans currentPages et, dans sa catégorie, lastCat.
factory('Pages', function($resource, $q, $timeout){
return {
res: $resource('jsonService/cat=:cat', {}, {
query: {method:'GET', params:{cat:'cat'}, isArray:true}
}),
lastCat: null,
currentPages: null,
query: function(cat) {
var res = this.res;
if(cat != this.lastCat){
var deferred = $q.defer();
var p = res.query({'cat':cat}, function(){
deferred.resolve(p);
});
this.lastCat = cat;
this.currentPages = deferred.promise;
}
return this.currentPages;
}
};
})
view.html
<ul >
<li ng-repeat="page in pages">
<a href="#{{params.cat}}/{{page.slug}}">{{page.title}}</a>
</li>
</ul>