2

クライアント側の開発に angularjs を使用する Rails アプリケーションがあります。「app/assets/javascripts/templates/」にあるテンプレートをロードしようとしました:

myApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/', {
        templateUrl: '/index.html',
        controller: 'MainController'
      }).
      otherwise({
        redirectTo: '/'
      });
  }]);

しかし、常にエラーが発生します:「エラー: [$compile:tpload] テンプレートの読み込みに失敗しました: /index.html」。

"templates" フォルダーを javascripts - app/assets/templates の外に移動し、次の行を config/application.rb に追加してアセット パイプライン ロードに追加しようとしました。config.assets.paths << Rails.root.join("app","assets","templates")

テンプレートへのフル パスを使用するまで、同じエラー メッセージが表示され続けます: templateUrl: '/assets/index.html',

  1. なぜ最初の方法では不十分なのですか? angular-rails-templates gem は app/assets/javascripts/templates でテンプレートを探すべきではありませんか?

  2. javascript 内のアセットへのフル パスを使用する必要があるのはなぜですか?

4

4 に答える 4

4

./public練習では、Angular テンプレートをフォルダーに保持する必要があることが示されています。たとえば、フォルダー内に templates というフォルダーを作成しpublicます。これで、次のように呼び出すことができます。templateUrl: 'templates/index.html'

app/assets/は実際には javascript および css ファイルにのみ使用されるため、これは理にかなっています。また、 に html ファイルがありますがapp/views、これらは.erb拡張子を使用するため、サーバーによってコンパイルされます。html必要なのは、いつでも使用できるように通常のファイルを用意することです。したがって、それらをパブリックフォルダーに配置します。

于 2015-04-20T13:42:39.437 に答える
0

これを試してください、これがうまくいくことを願っています。

 myApp.config(function ($routeProvider) {
  $routeProvider.
    when('/', {
     templateUrl: '/index.html',
     controller: 'MainController'
    }).
    otherwise({
     redirectTo: '/'
   });
});
于 2015-04-20T13:35:17.003 に答える
0

「gem 'sprockets'」を Gemfile に追加することで、この問題を解決しました。

于 2015-06-30T22:42:05.500 に答える