Nury Farelo Nury Farelo - 4 months ago 11
Javascript Question

Can't display data from $http get with angular, django

i have an application developed with Django in backend, where was created an API to can read information in the frontend with angular.

I'm calling with $http a list of persons in database, in the function i get the data, and display with console.log and is correct, but when i call that information in the template with ng-repeat, the content divs are created but the information inside not display, stays blank.

I will appreciate any sugestion to solve this.

// custom-angular.js

var app = angular.module('SesamoApp', []);

var URL = '/api/projects/torres-de-monterrey/segmentation/';

app.controller('cardsCtrl',['$scope', '$http', function($scope, $http) {

$scope.cards = [
{email: 'email@correo.com', segment: 'low'}
];

$http({
method: 'GET',
url: URL
}).then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
/*console.log(response.data);*/
$scope.data = response.data;

angular.forEach(response.data, function(value, key){
console.log(key + ': ' + value.email + ' -- ' + value.segment);
$scope.cards.push({email: value.email, segment: value.segment});
});

}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});

console.log($scope.cards);

}]);





// list.html

{% extends "base_app.html" %}
{% block main-container %}
<h1>Actividades de hoy</h1>
{% if activities %}
{% for activity in activities %}
{{activity.activity_type}}
{% endfor %}
{% else %}
<p>No tienes actividades programadas para hoy</p>
<hr />

<div class="segmentBlocks">
<div ng-app="SesamoApp">
<div class="cards" ng-controller="cardsCtrl">
<div class="card" ng-repeat="card in cards | orderBy:'segment'">
<p class="email">{{ card.email }}</p>
<p class="segment">{{ card.segment }}</p>
</div>
{{ data }}
</div>
</div>
</div>
{% endif %}
{% endblock %}





Screenshot with the result after execution (No info)

Screenshot

Answer

you should change your angular bracket {{ }} to {$ $} by adding this line in your app.js.

app.config(['$httpProvider', '$interpolateProvider',     function($httpProvider, $interpolateProvider) {
    $interpolateProvider.startSymbol('{$');
    $interpolateProvider.endSymbol('$}');
}])

then do this

<div class="segmentBlocks">
        <div ng-app="SesamoApp">
            <div class="cards" ng-controller="cardsCtrl">
                <div class="card" ng-repeat="card in cards | orderBy:'segment'">
                    <p class="email">{$ card.email $}</p>
                    <p class="segment">{$ card.segment $}</p>
                </div>
                {$ data $}
            </div>
        </div>
    </div>
Comments