2

我正在尝试使用 jQuery 设置一个 angularJS 应用程序,并且我正在使用 angular 路由系统来执行以下操作:

var app = angular.module('app', []);

app.config(function($routeProvider) {
  $routeProvider.when('/start_page', {
    templateUrl: 'path/to/template',
    controller: 'StartPageController'
  });

  $routeProvider.when('/container/:container/thing/:thing', {
    templateUrl: 'path/to/template',
    controller: 'ThingsInContainersController'
  });

  $routeProvider.otherwise({ redirectTo: '/start_page' });

})

我可以导航到具有允许我选择 container_id 和 thing_id 界面的起始页面,然后将我发送到容器和事物的路线,这一切都可以完美运行。问题是,如果我刷新容器事物页面,则会收到以下错误:

Uncaught Error: Syntax error, unrecognized expression: [href=#container/1/thing/2]

这似乎是堆栈跟踪中的 jQuery 错误。跟踪根本没有提到我的代码。我尝试了一些事情,似乎每当我输入一个以上的 url/之后,#我都会收到错误,而不是被正确地重定向到起始页。我现在的解决方案是使用-s 而不是/s 作为 url 分隔符,这似乎有效,但我怀疑实际上有一种正确的方法,我想知道它是什么。

我目前的解决方案:

var app = angular.module('app', []);

app.config(function($routeProvider) {
  $routeProvider.when('/start_page', {
    templateUrl: 'path/to/template',
    controller: 'StartPageController'
  });

  $routeProvider.when('/container-:container-thing-:thing', {
    templateUrl: 'path/to/template',
    controller: 'ThingsInContainersController'
  });

  $routeProvider.otherwise({ redirectTo: '/start_page' });

})
4

1 回答 1

2

我在我的代码库的其他地方有一个错误而没有意识到。#我在代码中使用了以下代码,该代码用于使用url 控制引导选项卡的应用程序的不同部分:

var activateTab = function() {
  var activeTab = $('[href=' + window.location.hash.replace('/', '') + ']');
  activeTab && activeTab.tab('show');
}

/问题是 replace 默认只替换模式的第一次出现,所以当我有多个s时它会抛出错误。

当然解决方案:

var activateTab = function() {
  var activeTab = $('[href=' + window.location.hash.replace(/\//g, '') + ']');
  activeTab && activeTab.tab('show');
}
于 2013-11-06T18:05:09.357 回答