如何从Grails插件提供的JS文件中指向AngularJS模板?

如何从Grails插件提供的JS文件中指向AngularJS模板?,angularjs,grails,asset-pipeline,angular-template,Angularjs,Grails,Asset Pipeline,Angular Template,我有一个Grails应用程序,它引入了几个Grails插件。这些插件需要被其他几个Grails应用程序重用,而不仅仅是我自己的 在Grails插件之一的资源包中,我定义了以下内容: 为了完整起见,我保留了这一点,但后来我切换到了资产管道 在其中一个插件的Javascript文件中,我定义了以下指令: ModuleA.directive('directivea',function() { return { restrict: 'EA', scope: {

我有一个Grails应用程序,它引入了几个Grails插件。这些插件需要被其他几个Grails应用程序重用,而不仅仅是我自己的

在Grails插件之一的资源包中,我定义了以下内容: 为了完整起见,我保留了这一点,但后来我切换到了资产管道

在其中一个插件的Javascript文件中,我定义了以下指令:

ModuleA.directive('directivea',function() {
    return {
        restrict: 'EA',
        scope: {
            'objId' : '='
        },
        replace: true,
        link: function(){
            $scope.ObjId = attributes[''];
            $scope.someFunction($scope.ObjId);
        },
        controller: function(){
            $scope.someFunction = function(objId){
                //some stuff happens here
            };
        },
        templateUrl: 'directives/directivea/directivea.html'
    }
});
它似乎很好地执行了控制器,但当它试图拉入模板时,它被卡住了:

GET/appname/directives/directivea/directivea.html 404(未找到)

这是有意义的,因为那不是部分模板的位置。但是它会在哪里呢?我如何将这些信息隔离在插件中,但可供所有下游应用程序使用?如果可以的话,我希望避免定义内嵌模板

**编辑以包含结构**

插件的结构:

  • grails应用程序
    • 形态
      • PluginNameForGrailsResources.groovy
      • BuildConfig.groovy
    • 控制器
      • 插头A.groovy
      • 插头B.groovy
    • 领域
      • PluginDomainA.groovy
  • 网络应用
    • css
    • 指令
      • 方向
        • directivea.js
        • directivea.html
    • 服务
      • restapis.js
  • 应用程序属性
  • pluginnamefrailsgrailsplugin.groovy
引用我的插件的应用程序的结构:

  • grails应用程序
  • 形态
    • BuildConfig.groovy
  • 控制器
  • 领域
  • 观点
    • 布局
      • 美因普惠制
    • index.gsp(通过资源r:require标记引用directivea)
  • 网络应用
  • css
    • main.css
  • js
    • index.js
  • 应用程序属性
**编辑以包括结构后资产-插件-切换** 不再定义资源,BuildConfig.groovy现在引用资产管道而不是资源,web应用中不再有文件

  • grails应用程序
    • 形态
      • BuildConfig.groovy
    • 控制器
      • 插头A.groovy
      • 插头B.groovy
    • 领域
      • PluginDomainA.groovy
    • 资产
      • Java脚本
        • 方向
          • directivea.js
          • directivea.html
        • 服务
          • restapis.js
      • 应用程序属性
      • pluginnamefrailsgrailsplugin.groovy

请注意,javascript引用的是web应用程序根目录中的内容,而不是资源或资产目录中的内容。您可以从核心文档中找到有关角度布线的更多信息:

因此
templateUrl:directives/directivea/directivea.html
需要实际引用
/web app/directives/directivea/directivea.html
目录中的文件


请注意,似乎不是很模块化,需要指定全局文件来共享(以及大多数其他内容)。如果您转到Grails2.4和
assets
插件,您可以执行模块化文件路径

使用Grails资源插件

请参阅使用的

插件承载一个角度模块。我试图通过只添加一个指令而不添加其他模块来保持它的简单性。还要注意,我在templateUrl-in指令中使用了
static/.

另请参阅使用以下配置的应用程序

grails.resources.adhoc.includes = ['/images/**', '/css/**', '/js/**', '/img/**']
正如报告中提到的。也许你正在讨论这个问题

试试看。“Hello World”是根据插件中的angular模块中的指令呈现的

如果您使用的是最新版本的Grails,那么我建议您在方便的时候切换到AssetPipeline

使用Grails资产插件

使用(本次发布时的第1.9.7节)和(本次发布时的第1.2.5节)

有关如何进行设置的详细信息,请参阅的答案


首先,确保Angular JS模块是小写的,或者在名称中使用u's或-,并且模板文件的文件名(忽略扩展名)与包含的任何javascript资产稍有不同。

您是否尝试过
模板URL:'static/directives/directivea/directivea.html'
?资源插件的静态资源默认结构是
/static/。
。如果您在github show中显示项目结构或共享一个应用程序来解释问题,那将非常好。是否如前面的评论所述使用
static/。
解决了问题?否,static/。。不起作用我已更新问题以包含项目结构看起来像
directivea.js
directivea.html
directivea
目录的同级。正确吗?我知道路径是如何引用web应用程序根的&我知道directives/directivea/directivea.html需要引用其中的文件。我需要知道的是,在给定真实位置的情况下,如何正确地引用它(来自所包含插件的web应用程序目录)。我正在使用grails 2.4.1,所以我将看看您提到的资产插件。我已经改变了使用资产管道的方式,虽然一切看起来都很干净,但我找不到引用HTML模板的方法。我发现一个asset pipeline angular js插件,看起来很有前途,但也没有达到预期效果。使用assets插件,将angular html放入名为
视图
javascripts
目录中,然后使用相对路径(例如视图/指令/)从angular代码中引用它们。应该封装在插件中。这看起来很有希望,但采用了新的结构
grails.resources.adhoc.includes = ['/images/**', '/css/**', '/js/**', '/img/**']