204

HTML 源代码

<div ng-app="">
    <div ng-controller="test">
      <div ng-address-bar browser="html5"></div>
      <br><br>
      $location.url() = {{$location.url()}}<br>
      $location.search() = {{$location.search('keyword')}}<br>
      $location.hash() = {{$location.hash()}}<br>     
      keyword valus is={{loc}} and ={{loc1}}
  </div>
</div>

AngularJS 源代码

<script>
function test($scope, $location) {
  $scope.$location = $location;
  $scope.ur = $scope.$location.url('www.html.com/x.html?keyword=test#/x/u');
  $scope.loc1 = $scope.$location.search().keyword ;    
    if($location.url().indexOf('keyword') > -1){    
        $scope.loc= $location.url().split('=')[1];
        $scope.loc = $scope.loc.split("#")[0]        
    }
  }
 </script>

这里的变量locloc1都返回test作为上述 URL 的结果。这是正确的方法吗?

4

8 回答 8

318

我知道这是一个老问题,但考虑到稀疏的 Angular 文档,我花了一些时间来解决这个问题。RouteProvider和routeParams是要走的路路由将 URL 连接到您的 Controller/View,并且 routeParams 可以传递到控制器中。

查看Angular 种子项目。在 app.js 中,您会找到路由提供程序的示例。要使用参数,只需像这样附加它们:

$routeProvider.when('/view1/:param1/:param2', {
    templateUrl: 'partials/partial1.html',    
    controller: 'MyCtrl1'
});

然后在你的控制器中注入 $routeParams:

.controller('MyCtrl1', ['$scope','$routeParams', function($scope, $routeParams) {
  var param1 = $routeParams.param1;
  var param2 = $routeParams.param2;
  ...
}]);

通过这种方法,您可以使用带有 url 的参数,例如:“ http://www.example.com/view1/param1/param2

于 2013-05-21T14:26:23.350 回答
164

虽然路由确实是应用程序级 URL 解析的一个很好的解决方案,但您可能希望使用更底层的$location服务,如注入到您自己的服务或控制器中:

var paramValue = $location.search().myParam; 

这种简单的语法适用于http://example.com/path?myParam=paramValue. 但是,仅当您$locationProvider之前在 HTML 5 模式中配置过:

$locationProvider.html5Mode(true);

否则,请查看http://example.com/#!/path?myParam=someValue "Hashbang" 语法,它有点复杂,但有利于在旧浏览器(非 HTML 5 兼容)上工作出色地。

于 2013-10-20T19:33:02.070 回答
32

如果你使用 ngRoute,你可以注入$routeParams你的控制器

http://docs.angularjs.org/api/ngRoute/service/$routeParams

如果你使用 angular-ui-router,你可以注入$stateParams

https://github.com/angular-ui/ui-router/wiki/URL-Routing

于 2014-03-24T01:20:39.210 回答
14

我找到了如何使用 $location.search() 从 URL 获取参数的解决方案

首先在 URL 中,你需要在参数前加上语法“#”,就像这个例子一样

"http://www.example.com/page#?key=value"

然后在您的控制器中,您将 $location 放入函数中并使用 $location.search() 获取 URL 参数

.controller('yourController', ['$scope', function($scope, $location) {

     var param1 = $location.search().param1; //Get parameter from URL

}]);
于 2018-05-30T09:01:54.923 回答
2
function GetURLParameter(parameter) {
        var url;
        var search;
        var parsed;
        var count;
        var loop;
        var searchPhrase;
        url = window.location.href;
        search = url.indexOf("?");
        if (search < 0) {
            return "";
        }
        searchPhrase = parameter + "=";
        parsed = url.substr(search+1).split("&");
        count = parsed.length;
        for(loop=0;loop<count;loop++) {
            if (parsed[loop].substr(0,searchPhrase.length)==searchPhrase) {
                return decodeURI(parsed[loop].substr(searchPhrase.length));
            }
        }
        return "";
    }
于 2019-08-17T15:25:01.037 回答
2

如果已经发布的答案没有帮助,可以尝试使用 $location.search().myParam; 使用 URL http://example.domain#?myParam=paramValue

于 2016-02-26T00:11:21.190 回答
0

将 angularjs 与 express 一起使用时

在我的示例中,我使用 angularjs 和 express 进行路由,因此使用 $routeParams 会弄乱我的路由。我使用以下代码来获得我所期望的:

const getParameters = (temp, path) => {
  const parameters = {};
  const tempParts = temp.split('/');
  const pathParts = path.split('/');
  for (let i = 0; i < tempParts.length; i++) {
    const element = tempParts[i];
    if(element.startsWith(':')) {
      const key = element.substring(1,element.length);
      parameters[key] = pathParts[i];
    }
  }
  return parameters;
};

这将接收一个 URL 模板和给定位置的路径。我只是用它来称呼它:

const params = getParameters('/:table/:id/visit/:place_id/on/:interval/something', $location.path()); 

把它们放在一起我的控制器是:

.controller('TestController', ['$scope', function($scope, $window) {
  const getParameters = (temp, path) => {
    const parameters = {};
    const tempParts = temp.split('/');
    const pathParts = path.split('/');
    for (let i = 0; i < tempParts.length; i++) {
      const element = tempParts[i];
      if(element.startsWith(':')) {
        const key = element.substring(1,element.length);
        parameters[key] = pathParts[i];
      }
    }
    return parameters;
  };

const params = getParameters('/:table/:id/visit/:place_id/on/:interval/something', $window.location.pathname);
}]);

结果将是:

{ table: "users", id: "1", place_id: "43", interval: "week" }

希望这可以帮助那里的人!

于 2019-10-17T12:32:06.013 回答
0

获取url值的简单方法

First add # to url (e:g -  test.html#key=value)

url in browser (https://stackover.....king-angularjs-1-5#?brand=stackoverflow)

var url = window.location.href 

(output: url = "https://stackover.....king-angularjs-1-5#?brand=stackoverflow")

url.split('=').pop()
output "stackoverflow"
于 2019-06-27T13:52:20.660 回答