angular-activerecord is a Backbone.Model inspired modellayer for AngularJS.
module('myApp', ['ActiveRecord']); // Add "ActiveRecord" as module dependency.
module('myApp').factory('Task', function (ActiveRecord) {
return ActiveRecord.extend({
// Rest API configuration for retrieving and saving tasks.
$urlRoot: '/api/tasks',
// Optional defaults
$defaults: {
title: 'Untitled',
estimate: ''
},
// optional named constructor (Shows "Task" as the type in a console.log)
$constructor: function Task(properties) {
this.$initialize.apply(this, arguments)
},
// An example method for task instances
/**
* Return the estimate in hours
* @return {Number}
*/
estimateInHours: function () {
var value = parseFloat(this.estimate);
if (isNaN(value)) {
return 0.0;
}
return value / 3600;
}
});
module('myApp').controller('TaskCtrl', function ($scope, Task, $document) {
Task.fetchOne(7).then(function (task7) { // Fetches '/api/tasks/7'
$scope.task = task7;
$document.title = task7.title + ' - MyApp';
});
/**
* @param {Task} task
*/
$scope.saveTask = function (task) {
$scope.spinnerVisible = true;
task.$save().then(function () {
$scope.successVisible = true;
}).catch(function (error) {
$scope.error = error;
}).finally(function () {
$scope.spinnerVisible = false;
});
};
});
module('myApp', ['ngRoute']).config(function ($routeProvider) {
$routeProvider
.when('/tasks', {
templateUrl: 'tasks.html',
controller: 'TaskListCtrl',
resolve: {
tasks: function (Task) {
return Task.fetchAll();
}
}
})
.when('/tasks/:taskId', {
templateUrl: 'task.html',
controller: 'TaskCtrl',
resolve: {
task: function ($routeParams, Task) {
return Task.fetchOne($routeParams.taskId);
}
}
});
});
module('myApp').controller('TaskCtrl', function ($scope, task) {
$scope.task = task;
});