J'ai un problème avec l'affichage des données JSON en angulaire. J'envoie avec succès des données du backend au frontend (angulaire), mais je ne peux pas les afficher.
J'ai essayé de simuler une situation similaire sur JSFiddle , même si j'ai déjà préparé des données depuis le backend
obtenir/envoyer des données -> Côté backend:
//Push data to Redis
var messages= JSON.stringify(
[
{
"name": "Msg1",
"desc": "desc Msg1"
},
{
"name": "Msg2",
"desc": "desc Msg2"
},
{
"name": "Msg3",
"desc": "desc Msg3"
},
{
"name": "Msg4",
"desc": "desc Msg4"
}
]);
redisClient.lpush('list', messages, function (err, response) {
console.log(response);
});
//get from redis and send to frontend
app.get('/messages', function(req, res){
// Query your redis dataset here
redisClient.lrange('list', 0, -1, function(err, messages) {
console.log(messages);
// Handle errors if they occur
if(err) res.status(500).end();
// You could send a string
res.send(messages);
// or json
// res.json({ data: reply.toString() });
});
});
obtenir des données -> frontend (angulaire)
angular.module('app')
.controller('MainCtrl', ['$scope', '$http', function ($scope, $http) {
'use strict';
getFromServer();
function getFromServer(){
$http.get('/messages')
.success(function(res){
$scope.messages= res;
console.log(res);
});
}
}])
Partie HTML avec directive ng-repeat:
<div ng-app="app" ng-controller="MainCtrl" class="list-group">
<div class="list-group-item" ng-repeat="item in messages">
<h4 class="list-group-item-heading">{{item.name}}</h4>
<p class="list-group-item-text">{{item.desc}}</p>
<div>
</div>
Quelqu'un sait-il quel est le problème?
Autant que je sache, vous stockez votre objet en JSON, mais vous ne le partez jamais. Par conséquent, en utilisant
$scope.messages = JSON.parse(res);
au lieu de
$scope.messages = res;
devrait résoudre votre problème.
Voici une version JSFiddle qui fonctionne: https://jsfiddle.net/29y61wtg/5/
Notez que cela n'inclut pas un appel $ http, si vous rencontrez toujours des problèmes après avoir utilisé $ http, dites-le moi dans les commentaires.