0
votes

Comment ajouter une valeur d'objet $ de portée à un autre objet de portée? (Angularjs)

Je prends les données de différentes listes de pages SharePoint. J'appelle ces listes avec une usine forte>.
Mon code compte le nombre d'articles avec un statut " terminé fort>" de chaque liste.
Je dois prendre les valeurs de chacun dans un tableau, mais le résultat est toujours null code>.
Voici mon exemple:

myApp.controller("myController", function($scope, $http, myFactory, $q) {

            $q.all([
                myFactory.siteOne().then(response => {
                    var items = response.data.d.results,
                        totalItems = 0;

                    for (var i=0;i<items.length;i++) {
                        var currentItem = items[i];
                        if(currentItem.Status!="Completed") {
                            totalItems++;
                        }
                    };
                    $scope.oneItems = totalItems;
                }),
                myFactory.siteTwo().then(response => {
                    var items = response.data.d.results,
                        totalItems = 0;

                    for (var i=0;i<items.length;i++) {
                        var currentItem = items[i];
                        if(currentItem.Status!="Completed") {
                            totalItems++;
                        }
                    };  
                    $scope.twoItems = totalItems;
                })
            ]).then(function() {
                $scope.data = [
                    $scope.oneItems, $scope.twoItems
                ];

                console.log(JSON.stringify($scope.data));
            });
        });


5 commentaires

La méthode . / Code> est obsolète. Voir Pourquoi les angularjs sont-ils $ HTTP Succès / Méthodes d'erreur obsolète? Supplégé de V1.6? .


Je ne savais pas cela, j'utilisais l'angulaire V1.3.0. Merci pour cette information @georgeawg


La demande à Site1 et la demande à Site2 mettent leurs données sur la même portée VAARIABLE, $ étendue.Projects . Est-ce intentionnel?


Oui, je l'ai fait intentionnellement, mais honnêtement, je ne sais pas pourquoi je l'ai fait .. En ce moment, cela ne me donne aucun problème, mais je l'ai déjà modifié. J'ai mis à jour le code et travaille.


La méthode .Chen est disponible en angularjs 1.3. En fait, il a toujours été là. La méthode . / Code> est créée comme sucre syntaxique, mais c'est vraiment un échec. Il devrait être évité dans tout nouveau code angularjs, y compris le code destiné à la v1.3. V1.3 n'est plus pris en charge et en utilisant .Success rend le chemin de migration plus difficile.


3 Réponses :


1
votes

Vous mettez vos données avant que les demandes soient terminées. Vous devez attendre jusqu'à la fin des deux demandes. Je proposerais d'utiliser promess.all ou $ q.all , ce qui est plus naturel pour angularjs i.e.: xxx


3 commentaires

promess.all et $. Tous ne sont pas interchangeables. AngularJs modifie le flux JavaScript normal en fournissant sa propre boucle de traitement d'événement. Cela scindre le JavaScript dans le contexte d'exécution classique et angularjs. Seules les opérations appliquées dans le contexte d'exécution de l'angularjs bénéficieront de la liaison de données angularjs, de la manipulation des exceptions, de la surveillance de la propriété, etc. uniquement $ q.all exécute dans le contexte angularjs.


Bonne prise. Merci pour la qualification.


Je ne connaissais pas $ Q, et pour une raison quelconque, cela fonctionne! Maintenant, les valeurs de la matrice n'apparaissent pas comme "null". Merci beaucoup pour votre aide.



0
votes

Agitez également des valeurs à la touche comme: xxx


0 commentaires

-1
votes

Vous avez la meilleure option car @Sergey Mell donné ci-dessous utilise un service $ q.
Si vous ne voulez pas utiliser $ q. Puis
Déclarer $ portée.data = []; en haut et utilisez
$ portée.data.push ($ de portée.onitems)
Mais assurez-vous que vous avez déclaré $ portée.data à [] en haut, sinon il lancera une erreur.
Votre code de contrôleur sera comme xxx


0 commentaires