angularjs中api和平面json之间的切换
我想我的stackoverflow搜索引擎今天坏了,因为我不可能是唯一一个问过这个问题的人。克里普斯,我希望不是,因为我真的需要一些帮助来解决这个问题。在数据源之间切换是最重要的部分,但“最佳抽象方式”也是下一个逻辑问题 不管怎样:我有大约三打小部件。每个小部件有三个数据源(API完整、API短、json文件)中的一个。我将有来自互联网的用户,销售人员提供临时登录的用户,以及使用自己的API密钥登录的用户angularjs中api和平面json之间的切换,json,angularjs,angular-http,Json,Angularjs,Angular Http,我想我的stackoverflow搜索引擎今天坏了,因为我不可能是唯一一个问过这个问题的人。克里普斯,我希望不是,因为我真的需要一些帮助来解决这个问题。在数据源之间切换是最重要的部分,但“最佳抽象方式”也是下一个逻辑问题 不管怎样:我有大约三打小部件。每个小部件有三个数据源(API完整、API短、json文件)中的一个。我将有来自互联网的用户,销售人员提供临时登录的用户,以及使用自己的API密钥登录的用户 no login=dummy data/json temp login=来自简化端点的数据
$http.get($scope.call).success(function(data) {
$scope.group = data;
});
因此,我的问题归结为:
最好的方法是(或者我可以)将$http与变量一起重新使用,这样我就可以插入变量,而不必为每个组合单独使用$http
我应该(或者应该)如何抽象这个逻辑,并从我的控制器中获取它
真正优秀的是我可以在控制器中调用的东西,可能是这样的:
var X = getEndpoint($scope.access, $scope.widget);
var Y = getEndpoint($scope.access, $scope.widget);
var Z = getEndpoint($scope.access, $scope.widget);
其余的都藏在引擎盖下的其他地方。有没有办法解决这个问题
非常感谢。正如@runTarm在其评论中所说,您可以将API调用的逻辑封装在单独的服务中。是的,您可以使用拦截器来控制您的http调用 许多选项之一是将每个用户类型的API端点存储在某个位置(例如,角度常数),然后使用与服务中用户访问权限级别匹配的端点。您的所有控制器/小部件都可以使用相同的服务,该服务包含确定端点的逻辑
我知道我在这里简化事情,但是考虑一个基于访问级别的HTTP数据获取服务:
app.factory('MyService', function($http, API){
return {
get: function(accessLevel) {
var endPoint = (_.findWhere(API, { access: accessLevel })).endPoint;
return $http.get(endPoint);
}
}
});
这将从给定访问级别确定的端点获取数据。这里API是一个常数:
app.constant('API', [{
access: 1,
endPoint: 'http://jsonplaceholder.typicode.com/posts'
},{
access: 2,
endPoint: 'http://jsonplaceholder.typicode.com/comments'
}]);
然后使用控制器中的服务,例如
MyService.get($scope.accessLevel).then(function(data){
$scope.response = data;
});
我希望你明白了。Simple Plunker hereApiMock是AngularJS的最小(1.68kb gzip)库,允许您通过将API调用路由到静态JSON文件来模拟RESTful API
可以将逻辑分离成一个
服务
?…然后调用该服务,在那里我只需输入两个变量并返回一些内容?这使它完全脱离了控制器,但我仍然需要直接执行端点逻辑吗?我只是希望能有一个更有效的方法。然后可以考虑使用<代码> $HTP的拦截程序。谢谢非常感谢。这让我走到了一半,但现在我不知道如何让它与复选框而不是单选按钮一起工作。请参阅不确定当用户可以选择多个小部件(每个小部件都有自己的端点)时如何开始工作。是否有方法在丢失其他通话结果的情况下重复该操作?或者我的理解是对的,我不能用一个单身汉来做这件事吗?根据你的想法做一些骇人的东西,你也看到了吗