Restangular / Json-ld |我可以获取数据,但我无法显示它们

时间:2016-01-23 16:50:42

标签: angularjs restangular json-ld

我是Angular的新人,需要你的帮助。 在我的团队中,我们在Symfony中创建了一个PHP REST API,我们想要连接到Angular客户端。

我已经有了Angular应用程序.. 我可以在我的XHR请求中看到我实际上获得了实体及其属性(用户)。

但是在我看来,我尝试了一些带有ng-repeat的{{user.name}},但它没有显示任何内容。

数据在Json-ld中发送,我们使用Restangular来读取它们。

这里有一些代码: app.js:

    angular
  .module('frontApp', [
    'ngAnimate',
    'ngCookies',
    'ngResource',
    'ngRoute',
    'ngSanitize',
    'ngTouch',
    'restangular'
  ])
  .config(function ($routeProvider) {
      $routeProvider
          .when('/', {
            templateUrl: 'views/main.html',
            controller: 'MainCtrl'
          })
          .when('/about', {
            templateUrl: 'views/about.html',
            controller: 'AboutCtrl'
          })
          .otherwise({
            redirectTo: '/'
          });
    })
    .config(['RestangularProvider', function (RestangularProvider) {
      // The URL of the API endpoint
      RestangularProvider.setBaseUrl('http://localhost:8000');

      // JSON-LD @id support
      RestangularProvider.setRestangularFields({
        id: '@id'
      });
      RestangularProvider.setSelfLinkAbsoluteUrl(false);

      RestangularProvider.setResponseExtractor(function(response) {
        var newResponse = response;
        if (angular.isArray(response)) {
          angular.forEach(newResponse, function(value, key) {
            newResponse[key].originalElement = angular.copy(value);
          });
        } else {
          newResponse.originalElement = angular.copy(response);
        }

        return newResponse;
      });

      // Hydra collections support
      RestangularProvider.addResponseInterceptor(function (data, operation) {
        // Remove trailing slash to make Restangular working
        function populateHref(data) {
          if (data['@id']) {
            data.href = data['@id'].substring(1);
          }
        }

        // Populate href property for the collection
        populateHref(data);

        if ('getList' === operation) {
          var collectionResponse = data['hydra:member'];
          collectionResponse.metadata = {};

          // Put metadata in a property of the collection
          angular.forEach(data, function (value, key) {
            if ('hydra:member' !== key) {
              collectionResponse.metadata[key] = value;
            }
          });

          // Populate href property for all elements of the collection
          angular.forEach(collectionResponse, function (value) {
            populateHref(value);
          });

          return collectionResponse;
        }

        return data;
      });
    }])
;

main.js:

angular.module('frontApp')
.controller('MainCtrl', function ($scope, Restangular) {

    $scope.ami1 = Restangular.one('amis',1).get();
    $scope.test ='Test';

    var amis = Restangular.all('amis');

      amis.getList().then(function (ami) {
          $scope.ami = ami;
      });
});

main.html中:

<div class="jumbotron">
<p>Liste d'amis :</p>
{{ ami1.nom }}
{{ test }}
<div ng-repeat="ami in amis" id="{{ ami['@id'] }}" class="row marketing">
    <h1>{{ ami.nom }}</h1>
    <h2>{{ ami.prenom }}</h2>
    <h3>{{ ami.id }}</h3>
</div>

chrome console

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我自己发现,这是代码:

    <div ng-repeat="ami in amis" id="{{ ami['@id'] }}" class="row marketing">
    <h1>Nom: {{ ami.nom }}</h1>
    <h2>Prenom: {{ ami.prenom }}</h2>
    <h3>Date de naissance: {{ ami.dateNaissance }}</h3>

    <h4>Telephone(s): </h4>
    <div ng-repeat="telephone in ami.telephones" id="{{ telephone['@id'] }}">
        {{ telephones[$index].numero }}
    </div>

</div>

答案 1 :(得分:0)

在您的控制器中......

$scope.amis = Restangular.all('amis').getList();

如果不起作用......

Restangular.all('amis').getList().then(function(response) {
    $scope.amis=response;

}).catch(function(error) {

   console.log(error);
})

答案 2 :(得分:0)

好的,现在我有另一个问题。 我有我所有的“ami&#39;和他们的属性,所以它真的很棒,但我和他妈的#am;有很多电话&#39; ids。

我尝试做的是让我的'ami&#39; &#39; NUMERO&#39;来自&#39;电话&#39;用这个电话号码。

我可以列出我所有的'amis&#39;电话号码,以及我的所有电话&#39;与numeros在其中。

感谢angain:)