我是Angular的新手,我遇到的问题是我的$ http url占位符没有被实际数据替换。我想要的是:
"/json/:searchType/:userId"
当我使用我的$ http电话时要替换为:
"/json/user/123"
相反,根据firebug的Net标签,我得到类似的东西:
"/json/:searchType/:userId?userId=123&searchType=user"
我试图创建一个小提琴,但因为我使用不同的视图和来自服务器的json数据,我不知道如何创建一些在小提琴中起作用的东西,看起来仍然像我实际上做的那样。我查看了this answer,this answer,this answer,this answer和this answer,仅举几例。我找不到与$ resource相关的帖子,或者用它来将url params链接到object params的@符号。
为了解释,我正在使用服务在控制器和我的工厂之间传递searchType
和accountId
参数,这实际上执行$ http请求。
这是我的控制器:
.controller('UserDetailsCtrl', ["$scope", "Search", function ($scope, Search) {
$scope.result = Search.getUser();
}])
这是我的工厂:
.factory('Search', ["$http", "SearchCriteriaSvc", function($http, SearchCriteriaSvc) {
var baseUrl = "/json/:searchType/:accountId";
return {
getUser: function () {
return $http.get(baseUrl,
{params:
{
accountId: SearchCriteriaSvc.getAccountId(),
searchType: SearchCriteriaSvc.getSearchType()
}
})
.then(function(result) {
return result.data;
});
}
}
}])
最后,我的服务:
.service('SearchCriteriaSvc', function() {
var searchType = "",
userId = "";
return {
getSearchType: function () {
return searchType;
},
setSearchType: function(value) {
searchType = value;
},
getUserId: function () {
return userId;
},
setUserId: function(value) {
userId= value;
}
};
})
我试过不使用该服务来传递params(只是手动输入字符串)而且得到相同的结果,所以我不认为我的服务是问题,但是,我不知所措
任何帮助都会很棒。谢谢!
答案 0 :(得分:4)
$ http不能以这种方式工作。您必须自己将参数整理为URL。 您可能正在考虑使用$ resource来预定义HTTP请求URL及其参数组件,或者$ route也允许使用类似的参数URL功能,但是在角度前端而不是后端的上下文中。 传递它们的方式传递的任何参数都将以查询/ GET样式参数结束。
http://docs.angularjs.org/api/ng.$http
params – {Object.<string|Object>} – Map of strings or objects which will be turned to ?key1=value1&key2=value2 after the url. If the value is not a string, it will be JSONified.