Je travaille sur une petite application de blogging. L'application a un backend (fait en PHP) qui crache des JSONs.
Celles-ci sont gérées et affichées par un frontend AngularJS (version 1.7.8).
Le fichier index.html ressemble à ceci :
<!-- Header -->
<header id="header">
<div class="logo"><a href="stackoverflow.com/">{{siteTitle}}</a></div>
</header>
<!-- Main -->
<section id="main">
<div class="inner" ng-view></div>
</section>
<!-- Footer -->
<footer id="footer">
<div class="container">
<ul class="icons">
<li><a href="{{twitter}}" target="_blank" class="icon fa-twitter"><span class="label">Twitter</span></a></li>
<li><a href="{{facebook}}" target="_blank" class="icon fa-facebook"><span class="label">Facebook</span></a></li>
<li><a href="{{instagram}}" target="_blank" class="icon fa-instagram"><span class="label">Instagram</span></a></li>
<li><a href="mailto:{{company_email}}" class="icon fa-envelope-o"><span class="label">Email</span></a></li>
</ul>
<ul class="icons">
<li ng-repeat="page in pages">
<a href="pages/page/{{page.id}}">{{page.title}}</a>
</li>
</ul>
</div>
<div class="copyright">
© {{companyName}}. All rights reserved. Design by <a href="https://templated.co" target="_blank">TEMPLATED</a>
</div>
</footer>
En liste des postes y poste unique sont affichés par l'intermédiaire du $routeProvider
angular.module('app', [
'ngRoute',
'app.controllers',
'ngSanitize'
]).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider.when('/', {
templateUrl: 'themes/caminar/templates/posts.html',
controller: 'PostsController'
}).when('/:slug', {
templateUrl: 'themes/caminar/templates/singlepost.html',
controller: 'SinglePostController'
}).otherwise({
redirectTo: '/'
})
}])
En posts.html
fichier :
<div class="spotlight" ng-repeat="post in posts" ng-if="$index > 0" ng-class="{ '': $even , 'alt': $odd }">
<div class="image flush">
<a href="{{post.slug}}">
<img ng-src="api/assets/img/posts/{{post.post_image}}" alt="{{post.title}}" />
</a>
</div>
<div class="inner">
<h3>{{post.title}}</h3>
<p>{{post.description}}</p>
<div ng-class="{ 'text-right': $even , 'text-left': $odd }">
<a href="{{post.slug}}" class="button special small">Read More</a>
</div>
</div>
</div>
En singlepost.html
fichier :
<div class="content">
<h2>{{post.title}}</h2>
<p class="meta clearfix">
<span class="pull-left">By <a href="posts/byauthor/{{post.author_id}}" title="All posts by {{post.first_name}} {{post.last_name}}">{{post.first_name}} {{post.last_name}}</a></span>
<span class="pull-right">Published on {{post.created_at | dateParse | date : "MMMM dd y"}} in <a href="categories/posts/{{post.cat_id}}" title="All posts in {{post.category_name}}">{{post.category_name}}</a></span>
</p>
<div class="image fit">
<img ng-src="api/assets/img/posts/{{post.post_image}}" alt="{{post.title}}">
</div>
<div class="post-content" ng-bind-html="post.content"></div>
</div>
L'application fonctionne bien, mais elle a un défaut : elle n'est pas adaptée au référencement. inspecter le message unique affiche correctement tout son code rendu, visualisation de la source ([CTRL] + [U] dans Chrome) révèle :
<section id="main">
<div class="inner" ng-view></div>
</section>
Je n'ai pas réussi à trouver un moyen d'afficher tout le contenu de la page d'accueil. source de la page et pas seulement dans l'inspecteur de Chrome.
Seositecheckup.com me donne cet aperçu :
En d'autres termes, je cherche un rendu côté serveur dans AngularJS. Comment puis-je y parvenir ?