forked from VeronicaWasson/BookService
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
117 lines (97 loc) · 3.25 KB
/
app.js
File metadata and controls
117 lines (97 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
var booksApp = angular.module('booksApp', ['ngRoute']); // The app depends on ngRoute module
// Services to encapsulate RESTful calls.
booksApp.factory('BookService', ['$http', '$cacheFactory', function ($http, $cacheFactory) {
var url = '/api/books';
return {
getAllBooks: function () {
return $http.get(url, { cache: true });
},
getBook: function (id) {
return $http.get(url + '/' + id);
},
addBook: function (book) {
// Clear the books cache.
var cache = $cacheFactory.get('$http');
cache.remove(url);
// Then submit the AJAX request.
return $http.post(url, book);
}
};
}]);
booksApp.factory('AuthorService', ['$http', function ($http) {
var url = '/api/authors';
return {
getAllAuthors: function () {
return $http.get(url, { cache: true });
}
};
}]);
// Set global error message if AJAX calls fail
booksApp.factory('httpInterceptor', ['$q', '$rootScope', function ($q, $rootScope) {
return {
'request': function (config) {
$rootScope.error = null;
return config;
},
'responseError': function (rejection) {
$rootScope.error = rejection.status + ': ' + rejection.statusText;
return $q.reject(rejection);
}
};
}]);
booksApp.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
}]);
// Configure routes
booksApp.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/books', {
templateUrl: 'Templates/book-list.html',
controller: 'BooksController'
})
.when('/detail/:id', {
templateUrl: 'Templates/book-detail.html',
controller: 'BookDetailController'
})
.when('/add-book', {
templateUrl: 'Templates/add-book.html',
controller: 'AddBookController'
})
.otherwise({
redirectTo: '/books'
});
}])
// Controllers
booksApp.controller('BooksController', ['$scope', 'BookService', function ($scope, BookService) {
BookService.getAllBooks().success(function (data) {
$scope.books = data;
});
}]);
booksApp.controller('BookDetailController', ['$scope', '$routeParams', 'BookService',
function ($scope, $routeParams, BookService) {
BookService.getBook($routeParams.id).success(function (data) {
$scope.book = data;
});
}]);
booksApp.controller('AddBookController', ['$scope', '$cacheFactory', 'BookService', 'AuthorService',
function ($scope, $cacheFactory, BookService, AuthorService) {
$scope.pending = false;
// Fetch the list of authors
AuthorService.getAllAuthors().success(function (data) {
$scope.authors = data;
$scope.selectedAuthor = $scope.authors[0];
});
$scope.book = { };
$scope.addBook = function () {
var book = {
AuthorId: $scope.selectedAuthor.Id,
Genre: $scope.book.Genre,
Price: $scope.book.Price,
Title: $scope.book.Title,
Year: $scope.book.Year
};
$scope.pending = true;
BookService.addBook(book).then(function () {
$scope.pending = false;
});
};
}]);