2016-03-18 1 views
0

Je crée une petite shoutbox avec JS angulaire et StamPlay. Par conséquent, j'ai créé une 'Test Shouts' que peut être accesed via un URLng-repeat à travers un tableau d'objets

Dans mon application angulaire J'ai créé un service pour récupérer les données:

app.factory('shouts', ['$http', function ($http) { 
 

 
    return $http.get('https://shoutbox.stamplayapp.com/api/cobject/v1/shouts').success(function (data) { 
 
     return data.data; 
 
    }); 
 

 
}]);

intérieur mon MainController Je joins les données à la $ scope.

app.controller('HomeController', [ 
 
    '$scope', 
 
    'shouts', 
 

 
    function ($scope, shouts) { 
 
     $scope.shouts = shouts; 
 
    } 
 

 
]);

Mais quand je suis tyring à ng-répéter à travers les données [], je ne peux pas accéder aux objets à l'intérieur. Je ne comprends pas quel est le problème.

<div ng-repeat="shout in shouts"> 
 
    {{shout.title}} 
 
</div>

+0

Toute erreur jeté la fenêtre de la console? Aussi - vous devriez utiliser track by - pour la performance, par ex. ng-repeat = "crier dans shouts track par $ index" – Katana24

+0

Malheureusement il n'y a pas d'erreur dans la console. Vous pouvez voir l'application en cours d'exécution ici: https://shoutbox.stamplayapp.com/#/ – juleee

+0

et le HTML et la composante/directive? – Katana24

Répondre

0

cris est une promesse de $ même si vous ne "retour data.data". Vous devez donc affecter $ scope.shouts lorsque la promesse est résolue.

app.factory('shouts', ['$http', function ($http) { 

    return $http.get('https://shoutbox.stamplayapp.com/api/cobject/v1/shouts'); 

}]); 

app.controller('HomeController', [ 
    '$scope', 
    'shouts', 

    function ($scope, shouts) { 
     shouts.then(function(data) { $scope.shouts = data.data}); 
    } 

]); 

Une autre option est de résoudre des cris en vous config de la route et l'injecter dans le contrôleur

$routeProvider 
.when("/home", { 
    templateUrl: "home.html", 
    controller: "HomeController", 
    resolve: { 
     shout_data: shouts 
    } 


app.controller('HomeController', [ 
    '$scope', 
    'shout_data', 

    function ($scope, shout_data) { 
     $scope.shouts = shout_data; 
    } 

]); 
+0

Cela ne devrait pas être: shouts(). Then (fonction (data) {$ scope.shouts = data.data}); – jbrown

+0

{{shout.title}}
Cela a résolu mon problème! On dirait que Stamplay renvoie des données un peu gênantes – juleee

+0

Est-ce que je fais l'ajout d'un nouveau message: {} à mon backend dans le service ou dans MainController? Je veux dire la demande de poste http. – juleee

-1

Avez-vous oublié d'attacher votre contrôleur au code HTML?

<div ng-controller="HomeController"> 
    <div ng-repeat="shout in shouts"> 
     {{shout.title}} 
    </div> 
</div> 

Plus d'informations sur ngController: https://docs.angularjs.org/api/ng/directive/ngController

+0

Non, j'ai attaché le contrôleur à ma vue via le $ routeProvider – juleee