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 "
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));
});
});
3 Réponses :
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 code> ou
$ q.all code>, ce qui est plus naturel pour angularjs i.e.:
promess.all code> et
$. Tous code> 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 code> exécute dans le contexte angularjs. B >
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.
Agitez également des valeurs à la touche comme:
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) strong>
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
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 code>. 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 code> 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 code> rend le chemin de migration plus difficile.