AngularJS 服务架构
AngularJS service architecture
我发现自己 运行 在我的服务中存在一些循环依赖问题,这可能意味着它们构建不正确。
基础知识 - 这很好用:
.factory('bookCollection', function($http, urls, user) {
var books = [];
return {
data: books,
getBooks: getBooks,
reset: resetCollection,
addBook: addToCollection
};
///////////////////////////////////
function getBooks() {
var params = {
user: user.current
};
return $http.get(urls.getBooks, { params: params })
.then(function(res) {
books = res.data;
return books;
});
}
function resetCollection() {
books = [];
}
function addToCollection(book) {
books.push(book);
persistCollection(books);
}
function persistCollection(books) {
return $http.post(urls.postBooks, books)
.then(function(res) {
return res.status;
});
}
})
.factory('user', function($http, urls) {
var currentUser = {};
return {
current: currentUser,
getUser: fetchCurrentUser
};
///////////////////////////////////
function fetchCurrentUser(userId) {
return $http.get(urls.getUser, { params: { id: userId }})
.then(function(res) {
angular.copy(res.data, currentUser);
});
}
});
现在我想介绍在获取新用户时重置当前 bookCollection
的功能。但是,如果我将 bookCollection
添加为 user
的依赖项,那么我将创建一个循环依赖项。
我还能如何使这个 bookCollection.reset
过程自动化,以便每次获取新用户时我都擦除集合?
此外,作为旁注,我想知道我的 bookCollection.data 是否应该是独立于与服务器交互的方法的自己的服务,因为其中一个只是 "store"数据,另一个是通信层。
最终使用了此 post 中的最佳解决方案:
angular JS - communicate between non-dependend services
基本上创建了第三个服务用作 "event bus" 并促进服务之间的通信,而无需在控制器中重复调用方法或过度使用 $rootScope
。
我发现自己 运行 在我的服务中存在一些循环依赖问题,这可能意味着它们构建不正确。
基础知识 - 这很好用:
.factory('bookCollection', function($http, urls, user) {
var books = [];
return {
data: books,
getBooks: getBooks,
reset: resetCollection,
addBook: addToCollection
};
///////////////////////////////////
function getBooks() {
var params = {
user: user.current
};
return $http.get(urls.getBooks, { params: params })
.then(function(res) {
books = res.data;
return books;
});
}
function resetCollection() {
books = [];
}
function addToCollection(book) {
books.push(book);
persistCollection(books);
}
function persistCollection(books) {
return $http.post(urls.postBooks, books)
.then(function(res) {
return res.status;
});
}
})
.factory('user', function($http, urls) {
var currentUser = {};
return {
current: currentUser,
getUser: fetchCurrentUser
};
///////////////////////////////////
function fetchCurrentUser(userId) {
return $http.get(urls.getUser, { params: { id: userId }})
.then(function(res) {
angular.copy(res.data, currentUser);
});
}
});
现在我想介绍在获取新用户时重置当前 bookCollection
的功能。但是,如果我将 bookCollection
添加为 user
的依赖项,那么我将创建一个循环依赖项。
我还能如何使这个 bookCollection.reset
过程自动化,以便每次获取新用户时我都擦除集合?
此外,作为旁注,我想知道我的 bookCollection.data 是否应该是独立于与服务器交互的方法的自己的服务,因为其中一个只是 "store"数据,另一个是通信层。
最终使用了此 post 中的最佳解决方案:
angular JS - communicate between non-dependend services
基本上创建了第三个服务用作 "event bus" 并促进服务之间的通信,而无需在控制器中重复调用方法或过度使用 $rootScope
。