我有三个指令:schoolList(下拉列表),groupList(下拉列表)和searchBar(输入)。
有一批学生。它可以按学校,组或自定义搜索字符串进行过滤。数据获取逻辑位于控制器内部。
从这些指令过滤这个集合的最佳和最干净的方法是什么?就像更改学校或小组一样,应该向服务器发出一个新请求,并附加用于过滤的查询参数。
现在我在我的控制器中有这个getUsers()
方法,并将它的引用传递给每个指令,以便在值更改时这些指令调用该方法,而params存储在单独的服务ParamStorage
中。但不知怎的,这感觉不对......
删除所有指令(因为它们简短而简单)并将所有逻辑移动到控制器会使其变得庞大且难以管理。
谢谢。
答案 0 :(得分:1)
将您的getUsers()
移至某个服务/工厂,例如:
app.factory('users', ['$http', function ($http) {
var url = 'http://my.domain.api/users/';
return {
filter: function (params) {
return $http.get(url, {...});
}
};
}]);
在控制器中,只要更改过滤参数,就注入工厂并调用函数filter
。
如果您的用户总数不多,您最好先检索所有用户(存储在缓存中)。每当过滤参数发生变化时,查询本地缓存而不是发出新的http请求。