12

クリックしたときにページがテンプレートに移動しない理由を理解しようとしています。URL が更新され、JS エラーはありません。ファイルが読み込まれると思いますが、コントローラーが無限に読み込まれます。console.log('test!')これは、SessionsController のインスタンス化にを追加した後でわかりました。

レイアウト

<div ng-view></div>

私の見解

<a href="/testing"> My link of seriousness </a>

私のJS

window.MainController = function($scope, $route, $routeParams, $location) {
  $scope.$route = $route;
  $scope.$location = $location;
  $scope.$routeParams = $routeParams;
  console.log($route);
  console.log($location);
  console.log($routeParams);
};

MainController.$inject = ["$scope", "$route"];

window.app = angular.module('web_client', [], function($routeProvider, $locationProvider) {
  return $routeProvider.when('/testing', {
    templateUrl: '/partials/other_stuff/index.html',
    controller: 'MyController'
  });
});


window.MyController = function($scope, $http) {
  console.log('Infinite Loop!');
};

そしてpartials/sessions/new.html、私は大きくて明るいです:

FOOBAR!
4

9 に答える 9

10

私も以前に同じ問題を抱えていましたが、根本的な原因は、<ng-view>この場合にも使用されたように見える使用にあると思います。ルートはすでにテンプレートURLをロードしているので、ng-viewディレクティブを使用すると、そのテンプレートが再帰的にロードされ、無限ループが発生すると思います。

ng-viewを削除してみてください。代わりに、ルートのtemplateUrlで指定した.htmlテンプレートにすべてのビューマークアップを直接配置してください。または、共有テンプレートの場合は、代わりにng-includeを使用してみてください(たとえば<div ng-include src="'/path/to/template.html'"></div> 、パスを一重引用符で囲んで、スコープ変数参照ではなく文字列として識別することを忘れないでください)。

于 2013-03-19T19:09:29.317 に答える
6

同じ症状の問題

私は最近、自分のプロジェクトの 1 つで同様の問題を解決しました。デバッグ中のコントローラーに console.log("Video Page Controller Loaded") を追加しました。同様に、タブを閉じるまでそのテキストを記録しました。

私の解決策:

テンプレート ファイルの間違った名前が参照されました。

when('/videos', {
  templateUrl: 'templates/video-list.tpl.html',
  controller: 'VideoListCtrl'
})

私が持っていたはずのとき:

when('/videos', {
  templateUrl: 'templates/video-list.html',
  controller: 'VideoListCtrl'
})
于 2014-03-01T20:49:12.323 に答える
3

私が見るのは、角かっこと欠落していることとカンマが欠落していることだけです。あなたはこれで試すことができます:

$routeProvider
  .when("/login", {
    templateUrl: "sessions/new.html",
    controller: SessionsController
  })
  .otherwise({
    redirectTo: "/"
  });
于 2013-01-28T16:23:28.113 に答える
1
  1. 部分ビューのパスが正しいことを確認します (部分ビューの HTTP コード 302 を取得しているかどうかを確認します。morgan を Node+Express で使用して、各要求の HTTP コードを出力できます)。

    1. パスが正しい場合でも、ブラウザーが静的データをキャッシュするため、無限ループが発生する可能性があります。クロムでキャッシュを無効にすることができます。そうするために:
      • 開発者コンソールを開く
      • 開発者コンソールの設定ボタンをクリック
      • オプション「キャッシュを無効にする(DevToolsが開いている間)」にチェックを入れます
      • サーバーを再起動し、開発者コンソールを開いた状態でページを更新します

私にとっては、パスの問題を解決し、キャッシュを無効にした後、問題は解決しました

于 2015-02-18T14:55:06.767 に答える
0

Rack アプリケーションで同様の問題が発生しました。解決策は次のとおりです。

use Rack::Static, urls: ["/js", "/css", "/templates"]
于 2015-06-18T12:53:34.893 に答える