2016-08-17 1 views
1

は私がプレイFrameworkとAngularJsを持つアプリケーションのために、次のファイルを持っている:sbt-sassifyプラグインがcssにそれらをコンパイルするようPlay Framework:アセットファイルで逆ルートを使用するにはどうすればよいですか?

app/views/index.scala.html 
app/assets/app/app.js 
app/assets/app/app.scss 
app/assets/app/main/_main.scss 
app/assets/app/main/main.controller.js 
app/assets/app/main/main.html 
app/assets/app/main/main.js 
app/assets/components/navbar/navbar.controller.js 
app/assets/components/navbar/navbar.directive.js 
app/assets/components/navbar/navbar.html 

scssファイルは、app/assetsです。他のビュー(jshtmlファイル)もapp/assetsにありますが、公開することができます。

conf/routesが含まれています。次のように

GET  /assets/*file    controllers.Assets.versioned(path="/public", file: Asset) 

navbar.directive.jsは次のとおりです。

angular.module('quotesApp') 
    .directive('navbar',() => ({ 
    templateUrl: 'components/navbar/navbar.html', 
    restrict: 'E', 
    controller: 'NavbarController', 
    controllerAs: 'nav' 
    })); 

これは動作しません、conf/routesで定義されているようtemplateUrl components/navbar/navbar.htmlパスは、/assets/前置する必要があるためファイル。

これを修正する正しい形式は何ですか?

navbar.directive.jsというファイルにプレフィックス/assetsをハードコードする必要がありますか?しかし、これは経路定義を変更するときに壊れるでしょう。

angular.module('quotesApp') 
    .directive('navbar',() => ({ 
    templateUrl: '/assets/components/navbar/navbar.html', 
    restrict: 'E', 
    controller: 'NavbarController', 
    controllerAs: 'nav' 
    })); 

私はビューapp/views/components/navbar/navbar.directive.scala.jsを作成する必要があります(これはのみroutes機能を使用するための定型の多くになります):

@() 
angular.module('quotesApp') 
    .directive('navbar',() => ({ 
    templateUrl: @routes.Assets.versioned("components/navbar/navbar.html"), 
    restrict: 'E', 
    controller: 'NavbarController', 
    controllerAs: 'nav' 
    })); 

他のソリューション?どういうふうに相対的な道でしょうか?

答えて

1

あなたはちょうどあなたがあなたの角度ディレクティブでそれを必要とする前に、あなたのindex.scala.htmlでそのパスを定義することができます:あなたのディレクティブの使用で、その後

<head> 
    <!-- Something --> 
    <script> 
     window.MyApp = { 
      'navBarPath': '@routes.Assets.versioned("components/navbar/navbar.html")'; 
     }; 
    </script> 
</head> 

と:それは完璧ではない

// (...) 
templateUrl: MyApp.navBarPath, 

が、私それがあなたが望むものを達成する最も簡単な方法だと思います。

関連する問題