AngularJS directive de chargement avant que les données
Disons que je suis le chargement d'une variable dans $portée avec $http:
$http.get('/teachers/4').success(function(data){
$scope.teacher = data;
});
Mon modèle utilise ces données:
Teacher: {{teacher.name}}
<students-view students="teacher.students"></students-view>
Cette directive permet de charger AVANT de l'enseignant chargé, mais mon directive a un code qui dépend de l'enseignant.les élèves de tableau en cours de chargement:
app.directive('studentsView', function(){
return {
scope: { students: '=' },
controller: function($scope){
_.each($scope.students, function(s){
//this is not called if teacher loads after this directive
});
}
};
});
Comment puis-je obtenir le comportement que je veux ici? Je ne veux pas m'arrêter à l'aide de $http, et je voudrais ne pas avoir à assigner une promesse de la portée si possible.
ce qui se passe dans la boucle? Pouvez mettre la boucle à l'intérieur de la réussite de rappel dans le contrôleur si cela aide ou de déplacer l'ensemble de la demande pour un service de
OriginalL'auteur Dave | 2014-12-18
Vous devez vous connecter pour publier un commentaire.
Utiliser une montre à attendre pour
students
à être disponibles. Une fois qu'il est disponible, vous composez le code qui dépend d'elle, puis retirez la montre. Vous pouvez sauter retrait de la regarder si tu veux le code à exécuter à chaque foisstudents
changements.Dans les DOM processus de compilation, de la directive contrôleurs obtenir instancié avant de fonctions de liaison, de sorte que les fonctions de liaison peut essentiellement être vus agissant sur la fin/état stable. L'angle de docs vous recommandons d'utiliser contrôleur lorsque vous souhaitez exposer une API à d'autres directives. Sinon, utilisez le lien. Certains prétendent le contraire: la Différence entre le 'contrôleur', 'link' et 'compiler' fonctions lors de la définition d'une directive. Tout dépend si ladite commande de questions à votre cas d'utilisation.
OriginalL'auteur user2943490
Vous aurez probablement besoin de faire une sorte de regarder sur
students
de savoir quand il est mis à jour, puis exécutez votre_.each
lorsque la montre est déclenchée:Plus sur
$watch
: https://docs.angularjs.org/api/ng/type/$rootScope.PortéeOriginalL'auteur jdmcnair