我可以把哪些东西放在有角度的Js中
Which things i can put in service in angular Js
我读了很多文章,但仍然找不到如何将东西放入服务中。
目前这是我的服务
angular
.module('users')
.factory('objectiveService', objectiveService);
objectiveService.$inject = ['$http', 'Restangular'];
function objectiveService($http, Restangular) {
return {
getObjectives: getObjectives,
getSingleObjective: getSingleObjective
};
function getObjectives(pid) {
var pr = Restangular
.all('api')
.all('users')
.one('subjects', pid)
.all('objectives');
return pr;
}
function getSingleObjective(oid) {
var pr = Restangular
.all('api')
.all('users')
.one('objectives', oid);
return pr
}
}
这是控制器:
var _vm = this;
this.objPromise = objectiveService.getObjectives(44);
function getData() {
var promise = _vm.objPromise;
promise
.getList(filters)
.then(function(result) {
$scope.gridData = result;
});
}
function remove(id) {
if (confirm('Are you sure you want to delete this!')) {
objectiveService.getSingleObjective(id).remove().then(function() {
$scope.getData();
});
}
}
// initial call
$scope.getData();
在这段代码中,我基本上看不到定义服务的用处,因为我仍然必须在控制器中使用then()
来将数据分配给Grid。
此外,我不能在服务中使用then()
,因为我没有$scope来更新数据。
人们说要做所有服务中的事情,但我不知道该怎么做。
理想情况下,我想把所有像remove(object_id)
这样的功能都投入服务
我可以在控制器中执行objectiveService.remove(id)
吗。
但删除后我必须调用$scope.getData()
,这在服务中是做不到的
使用服务的原因不是为了避免使用.then
。在你的控制器中,你会像这样使用.then
:
objectiveService.getObjectives(filters)
.then(function(result) {
$scope.gridData = result;
});
.then
是必需的,因为获取数据的调用是异步发生的。
约翰·帕帕的风格指南中的一些原因:
控制器的职责是展示和收集视图的信息。它不应该关心如何获得数据,只需要知道该向谁索取
这使得在测试使用数据服务的控制器时更容易测试(模拟或真实)数据调用。
数据服务实现可能具有非常特定的代码来处理数据存储库。这可能包括标头、如何与数据对话或其他服务,如$http。将逻辑分离为一个数据服务将此逻辑封装在一个地方,对外部消费者(可能是控制器)隐藏实现,也使更改实现变得更容易。
如果你把代码放在控制器中,这也意味着它是不可重用的。您不能在多个控制器中使用它,也不能在其他服务中使用它。
相关文章:
- Sails.js:我可以将一些服务/模型打包为npm并在Sails.jss应用程序中加载npm吗
- 我应该如何衡量JS的单元测试覆盖率?我可以'我对jscoverage不满意
- Bootstrap CSS和JS我必须将它们包含在单独的文件中,或者可以编译它们
- 我可以使用JS一次使用JSON数组中的一个字符串吗
- 在Minitest中,我可以在JS页面上触发并分析结果/响应吗
- Kinetic JS:我可以在形状中添加多个名称吗?
- 我可以'不要在ExpressJS中使用我的静态JS文件
- 我可以't从draft js中获取html输出
- Three.js:我可以创建网格来替换很多对象吗
- 这是关于Jquery/JS的,如果我改变元素's HTML-我可以对它执行其他Jquery/JS操作吗
- 我可以把所有的javascript.js文件捆绑在一起吗
- 我可以在Node中以编程方式更改.js文件的module.exports中的JSON对象吗
- Angular JS-我可以为选项卡使用单独的控制器来加载窗格吗.这是个好做法吗
- 木偶.js - 我可以检测到追加吗?
- Javascript/Node.js我可以使用hashmap有选择地执行函数吗?
- Node.JS我可以沙盒或限制什么函数可以访问
- js -我可以进入一个流星外壳,在我的流星环境中尝试一些JavaScript吗?
- 使用Processing.js:我可以有多个画布只有一个数据处理源sketch.pde
- 主干形式.js - 我可以像在 jQuery 验证中那样设置最小长度,还是让我在渲染主干表单后自己验证
- 骨干表单.js - 我可以在脚本中配置文本字段,或者在渲染后使用 jQuery 完成它