Modèle de chargement paresseux et contrôleur en interface utilisateur angulaire
Je tente de lazy load un contrôleur et le modèle de mon UI-Router router.js fichier, mais éprouve de la difficulté avec le modèle.
Le contrôleur de charge correctement, mais après c'est chargé, nous devons charger le modèle et c'est là que les choses vont mal.
Après ocLazyLoad charge le contrôleur, nous prenons la résolution Angulaire promesse qui est également inclus dans le templateProvider. Le problème est qu'au lieu de retourner à la promesse (templateDeferred.promesse) une fois le fichier terminé le chargement, la promesse est retourné comme un objet.
.state('log_in', {
url: '/log-in',
controller: 'controllerJsFile',
templateProvider: function($q, $http) {
var templateDeferred = $q.defer();
lazyDeferred.promise.then(function(templateUrl) {
$http.get(templateUrl)
.success(function(data, status, headers, config) {
templateDeferred.resolve(data);
}).
error(function(data, status, headers, config) {
templateDeferred.resolve(data);
});
});
return templateDeferred.promise;
},
resolve: {
load: function($templateCache, $ocLazyLoad, $q) {
lazyDeferred = $q.defer();
var lazyLoader = $ocLazyLoad.load ({
files: ['src/controllerJsFile']
}).then(function() {
return lazyDeferred.resolve('src/htmlTemplateFile');
});
return lazyLoader;
}
},
data: {
public: true
}
})
source d'informationauteur Rjdlee
Vous devez vous connecter pour publier un commentaire.
Ok, merci pour les réponses, mais j'ai pensé à elle.
})
Donc, après quelques lectures, je me suis rendu compte que j'avais un problème avec mes promesses. Nous avons créer un appelé lazyDeferred qui est le seul à être retourné à templateProvider et est déclarée comme une variable globale. templateProvider attend la promesse d'être remplies.
Après nous charger de notre contrôleur, nous créons une XHR/$requête http pour récupérer le fichier de modèle. $http.obtenir est une promesse pour que nous puissions retourner, $ocLazyLoad.la charge est aussi une promesse pour que nous puissions retourner. Enfin, nous avons juste besoin de résoudre le lazyDeferred et que je pense que les ballons à travers les promesses et résout tous les d'entre eux.
Je m'excuse si ce n'était pas très clair, je ne suis pas 100% sûr de comment cela fonctionne.
Dans le cas où vous souhaitez paresseusement charger le contrôleur, je suggère de suivre ces réponses détaillées:
Dans le cas où nous avons besoin de charger dynamiquement le modèle HTML, il est beaucoup plus facile. Il est un exemple de ce Q & Un
(le travail plunker)
Vous pouvez vérifier ces ainsi: