0
我有一個服務,它執行HTTP調用並獲取某些數據到特定的URL。 我想要做的是將參數從Controller傳遞給服務,並將其用作我的URI中的參數。從控制器傳遞參數到Angular服務
例如,我的電話是現在api.myurl.com/foo,我希望把它api.myurl.com/foo/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();
});
和控制器這樣的:
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;
})();
}
}
]);
我做出了您建議的更改。 所以,我傳遞了這樣的實體名稱:MyMapper.find({param:$ scope.a}); 如何在工廠中訪問它以將其包含在以下URL中? var requestURL = API_TR_URL +'/app_dev.php/entities/'+ param; ? 我看不到能夠使用它。 – thitami 2014-09-30 12:29:05
你可以在find中找到另外一個參數('param')或引用'params.param'或'p.param'(因爲'p'是'params'的副本) – 2014-09-30 12:32:14
看來目前MyMapper工廠甚至沒有被調用。我需要調試它。 – thitami 2014-09-30 12:41:18