Bonjour, toujours dans la continuité de la formation de Angular, je me retrouver bloqué sur les services.
J'ai un fichier json qui ressemble à ceci :

{
    "nid": "24",
    "vid": "24",
    "type": "page",
    "language": "fr",
    "title": "Presse",
    "uid": "1",
    "status": "1",
    "created": "1390404181",
    "changed": "1390404181",
    "comment": "0",
    "promote": "0",
    "sticky": "0",
    "tnid": "0",
    "translate": "0",
    "uri": ""
  },
  {
    "nid": "23",
    "vid": "23",
    "type": "page",
    "language": "fr",
    "title": "O\u00f9 acheter nos produits ?",
    "uid": "1",
    "status": "1",
    "created": "1390305089",
    "changed": "1394450294",
    "comment": "0",
    "promote": "0",
    "sticky": "0",
    "tnid": "0",
    "translate": "0",
    "uri": ""
  },
  {
    "nid": "22",
    "vid": "22",
    "type": "page",
    "language": "fr",
    "title": "Agr\u00e9ment",
    "uid": "1",
    "status": "1",
    "created": "1386698804",
    "changed": "1386698804",
    "comment": "0",
    "promote": "0",
    "sticky": "0",
    "tnid": "0",
    "translate": "0",
    "uri": ""
  }
]

Pour commencé j'ai récupérais les titres pour en faire un menu qui pointe vers

<a href="#about/{{content.nid}}">{{content.title}}</a>

jusqu'ici aucun soucis.

Mon problème surgit lorsque je veut afficher les contenues de l'article par rapport a son 'nid'. En suivant la formation mon code ressemble a ceci:

<!-- Script JS -->
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
        <script src="http://code.angularjs.org/1.2.14/angular-sanitize.js"></script>
        <script src="http://code.angularjs.org/1.2.14/angular-route.js"></script>
        <script>
        // mon module app contient les module de Route et de Sanitize 
        var app = angular.module('app', 'ngSanitize', 'ngRoute'])

        // systeme de routing
        app.config(function($routeProvider){
            $routeProvider
                .when('/home', {templateUrl: 'partials/home.html', controller: 'contentsCtrl'})
                .when('/test/:nid', {templateUrl: 'partials/test.html', controller: 'contentsCtrl'})
                .otherwise({redirectTo : '/'});
        })
        app.factory('ContentFactory', function(){
            var factory = {
                contents : ...], // mon code json que vous pouvez voir plus haut
                getContents : function(){
                    return factory.contents;
                },
                getContent : function(nid){
                    var content = {};
                    angular.forEach(factory.contents, function(value, key){
                        if(value.nid == nid){
                            content = value
                        }
                    });
                    return content;
                },
            }
            return factory;
        })

        app.controller('contentsCtrl', function ($scope, ContentFactory, $routeParams){
                var content = ContentFactory.getContents($routeParams.nid);
                var id = $routeParams.nid;
                $scope.contents = ContentFactory.getContents();
                $scope.title = content.title; // récupération du titre de l'article par rapport a l'id ('nid')
        });
        </script>

Voici a quoi ressemble mon fichier test.html :

<div class="large-8 columns" id="main-content">
            <!-- Recuperation de mes contenue de page -->
            <h1>{{title}}</h1>
        </div>

bien sur je fait bien appel a mon controller, module et les directives (ng-view , ng-app="app" etc..)
je n'obtiens pas d'erreur dans ma console, mais lorsque je log par exemple :
content.title j'obtiens undefined
$routeParams j'obtiens bien le 'nid'
$routeParams.nid je récupère bien le 'nid' aussi

du coup pourquoi il me récupère pas le titre de l'article dont le nid = 4 par exemple ou autres.

Merci d'avance

1 réponse


xander
Auteur
Réponse acceptée

Résolue faut d'orthographe je faisait pas appel a ma fonction ContentFactory.getContent($routeParams.nid); j'avais fait appel a ContentFactory.getContents($routeParams.nid);

;)