2017-06-12 1 views
0

J'ai ce code de travail, mais je ne pense pas que ce soit la bonne façon de le faire. Je pense que je dois utiliser $ q, mais c'est difficile à comprendre pour moi.AngularJS logique forEach, pas académique, mais travailler

Je reçois correctement ce joli tableau de JSON (data.data) de mon usine de AngularJS, de mon back-end de serveur php mysql. Il est un peu rendez-vous avec une date de début:

[{"id":"1","title":"Loi Travail","infos":null, 
    "adresse":"12 avenue des lis 78013 paris", 
    "criticite":"4","fichiers":null, 
    "start":"2017-06-11T22:37:59.012Z"}, 
    {"id":"17","title":"jjtyjyjt","infos":"jytjjyjyj", 
    "adresse":"tjtyjjyj","criticite":"7","fichiers":"", 
    "start":"2017-06-11T22:37:59.012Z"}] 

Le problème est que matériau angulaire DateTimePicker ne reconnaît pas la date de début, car il est une chaîne, donc je dois faire une boucle pour ajouter new Date(), pour convertir chacun de mes éléments "start".

Alors, je l'ai fait ce code court, qui travaille:

rdvFactory.get_rdvs().then(function(data){ 

     $scope.events = data.data; 

     angular.forEach($scope.events,function(value,index){ 

      value.start = new Date(value.start); 

     }) 
    }) 

Il fonctionne, ce qui signifie que je peux voir tous les rendez vous apparaissant à l'intérieur-matériau datetimepicker angulaire, mais Je ne pense pas que ce soit la bonne façon de faire, car je change plusieurs fois la portée (reliure bidirectionnelle) de chaque itération de angular.forEach, je suppose qu'elle est très consommatrice.

Je pense que je devrais faire un foreach sur data.data pour convertir les dates, et après qu'il est terminé, je mis en place $ scope.events seulement après cela. Je ne sais pas si vous voyez ce que je veux dire, mais il est difficile de travailler avec $ q, j'apprécierais que quelqu'un puisse m'expliquer $ qa un peu plus parce que même avec les exemples donnés sur stackoverflow, c'est vraiment difficile de comprendre la syntaxe.

Question: Pensez-vous qu'il est préférable d'ajouter un deuxième .alors comme ça? Dans ce dernier exemple, pensez-vous que le second.then attende vraiment que $ scope.events soit rempli? Je ne suis pas sûr ... Ca marche mais c'est la bonne façon de faire pour éviter les problèmes de performances?

Avoir une belle journée

Répondre

1

Nick - vous avez raison, modifier une variable de portée $ est coûteuse et générer des cycles digérer inutiles. Je vous suggère de le faire à la place -

rdvFactory.get_rdvs().then(function(data){ 
    var tempData = data.data; // A temp local variable 

    angular.forEach(tempData ,function(value,index){ 
     value.start = new Date(value.start); 
    } 

    $scope.events = tempData; // assign the final JSON to scope variable. 
}) 

En ce qui concerne $ q, son principalement utilisé pour combiner deux ou plusieurs réponses AJAX, puis effectuer l'opération. Par exemple -

S'il y a un appel AJAX pour récupérer les détails de l'utilisateur (basé sur l'ID) & un autre appel pour récupérer les droits d'accès utilisateur (basé sur l'ID), alors nous voulons les allumer ensemble pour un utilisateur à se connecter.

flux incorrect -

Fetch User details.on success then( 
    //fetch user access right // on success of user details call fire user access rights. 
) 

Au lieu de cela, vous la file d'attente à la fois les appels dans un tableau et attendre les deux d'entre eux ou échouent ensemble passer.

$q = [call1, call2] 
$q.then ( 
    //on success, we know that user is correct and has right user access. 
) 
+0

Je vous remercie beaucoup, je vais passer en revue et essayer, passez une bonne journée – user7370387