Skip to content

radify/angular-scaffold

Repository files navigation

Travis Status for radify/angular-scaffold Coverage Status Dependency Status devDependency Status Code Climate

Angular Scaffold

Simple scaffolding for AngularJS

Angular Scaffold is a collection of convenience wrappers around angular-model collections.

Dependencies

Running unit tests

Install the test runner with npm:

npm install

You can then run the tests with Gulp:

gulp

You can run coverage with:

gulp coverage

angular-scaffold API docs

See /docs/api.md in this project for detailed documentation of all angular-scaffold's functions.

Supporting angular-scaffold in your API

Your API must:

  • Use and interpret HTTP headers correctly (e.g. HTTP PUT, POST, GET and DELETE)
  • Consume and return json
  • Supply a $links collection containing a self key, e.g.:
[
    {
        "$links": {
            "self": {
                "href": "/api/posts/postaa"
            }
        },
        "_id":"posta",
        "name":"Post A",
        "body":"Some content for Post A"
    }
]

Basic Usage

In your AngularJS application, include the JavaScript:

// your specific paths may vary
<script src="node_modules/radify/angular-model.js"></script>
<script src="node_modules/radify/angular-scaffold.js"></script>

In your app configuration, state a dependency on Angular Model and Angular Scaffold:

angular.module('myApp', [
	'ur.model',
	'ur.scaffold'
]);

Example controller using Angular Scaffold:

.controller('PostsController', function($scope, scaffold) {
	angular.extend($scope, {
		posts: scaffold('Posts', {})
	});
})

Basic CRUD example project

An example application is included in this repository. It has a very simple API that illustrates a basic use case for angular-scaffold.

To install and run the sample project:

cd sample-project
npm install
node server.js

You can then browse to http://localhost:4730/ and add/remove Post objects from a list. angular-scaffold takes care of talking to the API for you.

Pagination

angular-scaffold can paginate your model. Your API will need to support the Range: resources=n-n header to take advantage of this. For example, Range: resources=10-20 would return resources 10 through 20.

scaffold('Shares', {
paginate: { size: 20, page: 1, strategy: 'paged' }
});

Querying

You can pass a specific query in, which will be sent through to the API. Your API will have to know how to respond to this.

scaffold('Comments', {
  query: {
    offline: $scope.selected._id
  }
});

You can also pass in an ordering parameter. Again, your API will have to know what to do with it.

return scaffold('Shares', {
  query: { to: true, order: { _id: 'desc'} }
});