我有一个服务,它执行HTTP调用并获取某些特定URL的数据。 我想要做的是将一个参数从Controller传递给服务,并将其用作我的URI中的参数。
例如,我现在的电话是api.myurl.com/foo,我想把它变成api.myurl.com/foo/bar
其中 bar 是用户从搜索表单输入的内容。
目前,我的代码如下所示:
服务
angular.module('MyApp').service('MyMapper', function(MyService, $http, $q, API_TR_URL, _, PAGINATION_LIMITS) {
function MyMapper() {}
MyMapper.prototype.find = function(params) {
var p = angular.copy(params);
p.limit = PAGINATION_LIMITS.myResolver;
var d = $q.defer();
var requestURL = API_TR_URL + '/app_dev.php/entities/' + param;
$http.get(requestURL)
.success(function(results)
{
console.log('Results data entities: ', results.data.data.entities);
for (var entitiesIndex in results.data.data.entities)
{
var preparedData = results.data.data.entities[entitiesIndex];
results.data.data.entities[entityIndex] = new Entity(preparedData);
}
d.resolve(results);
})
.error(function(status)
{
d.reject(arguments);
});
return d.promise;
};
return new MyMapper();
});
和 Controller 是这样的:
angular.module('MyBackendApp')
.controller('MySearchFormController', ['$scope', 'API_TR_URL', 'MyMapper', '$location', function($scope, MyMapper, $location){
$scope.submit = function (){
console.log('-- Search string: '+ $scope.entityName);
var entitiesCount = Object.keys(data.data.data.entities).length;
$scope.totalPagesNum = Math.ceil( entitiesCount / 10);
$scope.page = data.page;
var d = $q.defer();
// Build the results
$scope.entitiesResults = (function listEntities(entities, $scope){
var entities = data.data.data.entities;
if ( (typeof entities === 'undefined') || (entities.length === 0) ){
return null;
}
return entities;
})();
}
}
]);
答案 0 :(得分:0)
否控制器中的哪个位置您使用MyMapper
变量的引用,但MyMapper
是MyMapper
的实例,因此find
} 功能。因此,在 controller 中,您可以拥有以下代码
var promise = MyMapper.find({param1:1,param2:"a"});
调用find
对象的MyMapper
函数并存储返回的 promise >功能。然后,您可以像这样监听承诺的结果
promise.then(function(entities) {
//TODO ON SUCCESS
}, function(errorMsg) {
//TODO ON FAIL
});
此外,我认为您应该使用factory
功能而不是service
。
这就是你所需要的(假设所有内容都为Javascript编译并为Angular注册)。