Bonjour tout le monde,

Désolé de vous déranger pour ça mais j'ai un petit soucis concernant la formation proposée par Grafikart sur AngularJS. C'est une très bonne formation et je le remercie, néanmoins, je ne sais pas pourquoi mais dans le chapitre consacré au directive plus précisement au then de la promise ce code ne fonctionne pas :

$scope.posts = PostFactory.getPosts().then(function(posts){
        $scope.posts = posts;
    }, function(msg){
        alert(msg);
    });
}

C'est au moment de l'affectation $scope.posts = posts que sa foire, en effet il me dit que $scope.posts n'est pas défini.

Un console.log de posts me retourne bien mes données contenu dans le fichier JSON donc l'appel Ajax via $http.get fonctionne correctement.

Voilà j'espère que vous pouvez m'aider, j'ai passé 1h à chercher et je ne comprend vraiment pas pourquoi sa foire :(

Merci d'avance

5 réponses


Maenhyr
Réponse acceptée

Quand il fait un ng-repeat si tu ne lui précises pas la clé, il va utiliser l'id. Si tu as un [ngRepeat:dupes] c'est que tu as 2 posts avec le même id.

Bonsoir, il ne faut pas instancier ta variable $scope.posts avec le résultat de then() puisque cette fonction renvoie un void.

$scope.posts = PostFactory.getPosts().then(function(posts){
        $scope.posts = posts;
    }, function(msg){
        alert(msg);
    });
}
PostFactory.getPosts().then(function(posts){
        $scope.posts = posts;
    }, function(msg){
        alert(msg);
    });
}
GameTag
Auteur

Hello,

Merci beacoup de votre réponse, votre code est similaire à l'autre. En faite j'avais mal identifié l'erreur, voici l'erreur qu'il me retourne [ngRepeat:dupes]
J'ai regardé sur le net mais je n'arrive toujours pas à trouver d'où vient cette erreur, c'est à l'appel de la vue la voici :

<div ng-repeat="post in posts">
  <h1>{{post.name}}</h1>

  <p>{{post.content}}</p>

  <h2>{{post.comments.length}}</h2>

  <a href="#/comments/{{post.id}}">Voir les commentaires</a>
</div>

D'après la doc d'angular il faut corriger par ça :
<div ng-repeat="value in [4, 4] track by $index"></div>

Mais rien n'y fait, d'ailleurs j'aimerais bien savoir à quoi correspond le $index ?
Merci beaucoup de votre aide

Cordialement,

GameTag
Auteur

Merci bien, j'ai regardé de plus près mon fichier JSON et il y avait en effet un problème, en faite dans ma console il l'écrivait en string alors que sa doit être représenté par un [obj, obj,...]

En tout cas merci beaucoup de fil en aiguille j'ai trouvé grâce à vous :)
A bientôt

De rien !

$index est l'index tout simplement, il s'agit de la position de l'objet dans le tableau.