AngularJS $ http url占位符没有放置真实数据

时间:2013-08-09 14:49:01

标签: angularjs

我是Angular的新手,我遇到的问题是我的$ http url占位符没有被实际数据替换。我想要的是:

"/json/:searchType/:userId"

当我使用我的$ http电话时要替换为:

"/json/user/123"

相反,根据firebug的Net标签,我得到类似的东西:

"/json/:searchType/:userId?userId=123&searchType=user"

我试图创建一个小提琴,但因为我使用不同的视图和来自服务器的json数据,我不知道如何创建一些在小提琴中起作用的东西,看起来仍然像我实际上做的那样。我查看了this answerthis answerthis answerthis answerthis answer,仅举几例。我找不到与$ resource相关的帖子,或者用它来将url params链接到object params的@符号。

为了解释,我正在使用服务在控制器和我的工厂之间传递searchTypeaccountId参数,这实际上执行$ 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(只是手动输入字符串)而且得到相同的结果,所以我不认为我的服务是问题,但是,我不知所措

任何帮助都会很棒。谢谢!

1 个答案:

答案 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.