$ route.routes打印两次URL,为什么?

时间:2016-08-10 15:26:39

标签: javascript angularjs angularjs-routing

我已经创建了一个学习angularJs路由的基本应用程序。 当我将deviceXforces[tid] += xForce; deviceYforces[tid] += yForce; deviceZforces[tid] += zForce; 打印到浏览器控制台时,这就是我所看到的:

enter image description here

这是我的路线配置:

$routes.route

almRequirement.config(function($routeProvider) { $routeProvider.when('/', { templateUrl : 'home.html', controller : 'homeController' }).when('/addRequirement', { templateUrl : 'addRequirement.html', controller : 'addRequirementController' }).when('/addModule', { templateUrl : 'addModule.html', controller : 'addModuleController' }).when('/addContraint', { templateUrl : 'addContraint.html', controller : 'addContraintController' }).when('/viewRequirement', { templateUrl : 'viewRequirement.html', controller : 'viewRequirementController' }).when('/updateRequirement/:reqId', { templateUrl : 'updateRequirement.html', controller : 'updateRequirementController' }).when('/viewParticularRequirement/:reqId', { templateUrl : 'viewParticularRequirement.html', controller : 'viewParticularRequirementController' }); }); 中配置的每个网址都会显示两次。任何人都可以解释为什么会这样?

这可能会帮助我下次调试我的应用程序。

1 个答案:

答案 0 :(得分:1)

这是Angular的设计。 $routeProvider.when()添加"重定向"到用户指定的路径,所以有或没有尾部斜线到达同一个地方。

作为the source code states

  

@param {string}路径路径路径(匹配   $location.path)。如果$location.path包含多余的内容   尾随斜线或缺少一条,路线仍然匹配和   将更新$location.path以添加或删除尾部斜杠以与路径定义完全匹配。

以下source code for when()证明了(我的/**** comments ****/已添加):

this.when = function(path, route) {
    //copy original route object to preserve params inherited from proto chain
    var routeCopy = shallowCopy(route);
    if (angular.isUndefined(routeCopy.reloadOnSearch)) {
      routeCopy.reloadOnSearch = true;
    }
    if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {
      routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;
    }

    /**** Add route as user specified it ****/

    routes[path] = angular.extend(
      routeCopy,
      path && pathRegExp(path, routeCopy)
    );

    // create redirection for trailing slashes
    if (path) {
      var redirectPath = (path[path.length - 1] === '/')
            ? path.substr(0, path.length - 1)
            : path + '/';

      /**** Add route with / added or stripped ****/

      routes[redirectPath] = angular.extend(
        {redirectTo: path},
        pathRegExp(redirectPath, routeCopy)
      );
    }

    return this;
  };