无法使用angular,django显示来自$ http的数据

时间:2016-07-08 02:02:05

标签: javascript angularjs django

我在后端使用Django开发了一个应用程序,其中创建了一个API,可以使用angular读取前端中的信息。

我用$ http调用数据库中的人员列表,在我获取数据的函数中,并使用console.log显示并且是正确的,但是当我使用ng-repeat在模板中调用该信息时,内容div已创建但内部信息未显示,则保持空白。

我会很感激解决这个问题。

// 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

2 个答案:

答案 0 :(得分:1)

我认为Django模板是在ngRepeat块中解析括号,作为Django模板的一部分,而不是将它留给Angular控制器。为什么不使用ngBind并将{{}}ng-bind="card.email"属性添加到ng-bind="card.segment"代码中,而不是在此使用p

否则,使用围绕相关角度块的verbatim标记来逃避Django模板。

答案 1 :(得分:1)

您应该通过在app.js中添加此行,将角括号 {{}} 更改为 {$ $}

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

然后这样做

<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>