2016-08-17 90 views
1

我有以下文件以供播放框架和AngularJs應用程序: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,使sbt-sassify插件他們編譯爲css。和其他視圖(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' 
    })); 

這是行不通的,因爲templateUrl components/navbar/navbar.html路徑需要通過/assets/前綴,如conf/routes定義文件。

那麼,解決這個問題的正確形式是什麼?

我應該在文件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, 

它並不完美,但我認爲這是實現你想要的最簡單的方法。

相關問題