2

jQueryを使用してangularJSアプリをセットアップしようとしていますが、次のような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' });

})

container_id と thing_id を選択できるインターフェイスを備えたスタート ページに移動すると、すべてが完全に機能するコンテナーとモノのルートに移動できます。問題は、コンテナーの Thing ページを更新すると、次のエラーが発生することです。

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

これは、スタック トレースから jQuery エラーのようです。トレースは私のコードについてまったく言及していません。/いくつか試してみましたが、URLの後に複数の 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 に答える