2016-08-17 68 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, 

它并不完美,但我认为这是实现你想要的最简单的方法。

相关问题