在AngularJS中解析请求的URL的最佳方法

时间:2014-02-20 21:35:41

标签: javascript angularjs

我的网址如下:

http://www.something.com/project/edit/ 987654321

使用AngularJS解析URL的 987654321 部分的最佳方法是什么? Angular中是否有任何辅助函数? (我宁愿不使用jQuery)

如果我理解正确,除非您在URL中使用#或启用HTML5模式,否则AngularJS中的路由功能将无法工作。

我们需要在首次加载页面时解析此URL。

3 个答案:

答案 0 :(得分:10)

我会根据标题回答这个问题,因为我在这里寻找解析网址的方法。这是我在一个提琴页面上找到的answer

var parser = document.createElement('a');
parser.href = "http://www.example.com";
//At this point it's parsed and all the info is on the parser object
console.log(parser.protocol);
console.log(parser.hash);
console.log(parser.hostname);
console.log(parser.port);
console.log(parser.pathname);
console.log(parser.search);

[更新]
我刚注意到有一个URL类。

var parsedURL = new URL('http://www.example.com');
console.log(parsedURL.hash);
console.log(parsedURL.protocol);
console.log(parsedURL.host);
//etc

答案 1 :(得分:4)

您可以使用$location service's $location#path()功能:

# given: url = http://www.something.com/project/edit/987654321
$location.path().split('/').pop();

然而,听起来你有路由问题。查看Angular Tutorial on Routing,其中显示了如何在$routeProvider配置中正确使用app.js路由。从教程:

phonecatApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
       when('/phones/:phoneId', {
        templateUrl: 'partials/phone-detail.html',
        controller: 'PhoneDetailCtrl'
      })
      .otherwise( ...)  //omitting remainder of cut/paste

因此,您的app.js会有如下路线定义:

ender2050App.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/project/edit/:id', {
        templateUrl: 'partials/editor.html',
        controller: 'EditorCtrl'
      })

您的控制器文件(即controllers.js)将EditorCtrl注入$routeParams服务以访问id变量。

如果您需要更自定义的解析选项,请查看$parse service

答案 2 :(得分:2)

问题和答案都不尊重标题。我在这里试图搜索如何解析角度中的任何网址。这个问题是关于解析请求的网址。如果我想解析http://www.google.com ??

怎么办?

编辑。