At my new job I’ve been working a fair bit with ui router. It’s a fun library and I thought I would brush up a bit and have some fun practice interfacing it with the wordpress api plugin through restangular.
So let’s take a quick look at how this very simple process works.
First, I installed all the dependencies using bower.
Next, set up a simple index.html file:
<!doctype html>
<html ng-app="blog">
<head>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/lodash/lodash.min.js"></script>
<script src="bower_components/restangular/dist/restangular.js"></script>
<script src="app.js"></script>
</head>
<body>
<div>
<div ui-view></div>
</div>
</body>
</html>
And here’s app.js:
var myApp = angular.module('blog', ['ui.router', 'restangular']);
myApp.config(function($stateProvider, $urlRouterProvider, RestangularProvider) {
RestangularProvider.setBaseUrl('http://benwendt.ca/blog/wp-json/')
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home', {
url: '/',
templateUrl: 'posts.html',
resolve: {
posts:function(Restangular) {
return Restangular.all('posts').getList()
}
},
controller($scope, $sce, $filter, posts) {
$scope.posts = posts
}
})
}).filter('unsafe', function($sce) { return $sce.trustAsHtml })
The two main takeaways here are:
- Set up the base api url using
RestangularProvider.setBaseUrl(). - Use ui-router’s
$stateProviderto set up which template, api requests, and controller to use. Also I’m using a nifty filter I found for running<A href="http://stackoverflow.com/a/19705096/973810">$sce.trustAsHtml</a>.
And the template is super simple, but here it is:
<div ng-repeat="post in posts">
<div class="post">
<h1 ng-bind-html="post.title | unsafe"></h1>
<div ng-bind-html="post.content | unsafe"></div>
</div>
</div>
So, in conclusion, these technologies make it really easy to pull data off a json api and throw it into the browser. It’s wonderful.