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

时间:2014-08-11 20:31:17

标签: angularjs grails asset-pipeline angular-template

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

在其中一个Grails插件的资源包中,我定义了以下内容: 保留完整性,但我已切换到Asset-Pipline

modules = {
    directivea {
        resource url: 'directives/directivea/directivea.js'
        resource url: 'services/restapis.js'
    }
}

在其中一个插件的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'
    }
});

它似乎正在执行控制器,但当它试图拉入模板时它会窒息:

  

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

这是有道理的,因为它不是部分模板的位置。它会在哪里?如何将该信息隔离到插件中但可供所有下游应用程序使用?如果可以的话,我想避免定义内联模板。

**编辑包含结构**

插件结构:

  • 的grails-app
    • CONF
      • PluginNameForGrailsResources.groovy
      • BuildConfig.groovy
    • 控制器
      • PluginControllerA.groovy
      • PluginControllerB.groovy
      • PluginDomainA.groovy
  • web应用程序
    • CSS
    • 指令
      • directivea
        • directivea.js
        • directivea.html
    • 服务
      • restapis.js
  • application.properties
  • PluginNameForGrailsGrailsPlugin.groovy

引用我的插件的应用程序的结构:

  • 的grails-app
  • CONF
    • BuildConfig.groovy
  • 控制器
  • 的观点
    • 布局
      • main.gsp
    • index.gsp(通过资源r:require标签引用directivea)
  • web的应用
  • CSS
    • 的main.css
  • JS
    • index.js
  • application.properties

**编辑包括结构后资产 - 插件 - 开关** 没有更多资源定义,BuildConfig.groovy现在引用资产pipline而不是Resources,web-app中没有更多文件

  • 的grails-app
    • CONF
      • BuildConfig.groovy
    • 控制器
      • PluginControllerA.groovy
      • PluginControllerB.groovy
      • PluginDomainA.groovy
    • 资产
      • Javascript角
        • directivea
          • directivea.js
          • directivea.html
        • 服务
          • restapis.js
      • application.properties
      • PluginNameForGrailsGrailsPlugin.groovy

2 个答案:

答案 0 :(得分:2)

使用Grails资源插件

请参阅使用sample grails appthis grails plugin

插件托管一个角度模块。我试图通过添加指令而不是其他模块来保持简单。另请注意,我在templateUrl in directive中使用了static/..

另请参阅使用以下配置的应用中的Config.groovy

grails.resources.adhoc.includes = ['/images/**', '/css/**', '/js/**', '/img/**']

answer to this question中所述。也许你正在解决这个问题。

试一试。 “Hello World”是从插件内部角度模块中的指令呈现的。

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

使用Grails资源插件

使用Grails asset-pipeline plugin(发布时为1.9.7)和Grails Angular-template-asset-pipeline plugin(截至此发布时为1.2.5)。

有关如何进行设置的详细信息,请参阅How to reference a static HTML resource using the Grails Asset Pipeline plugin的答案。

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

答案 1 :(得分:0)

请注意,javascript引用了来自web-app根目录的内容,而不是来自资源或资产目录。您可以从核心文档中找到有关Angular路由的更多信息:$route

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

请注意,resources plugin似乎不是非常模块化的,需要指定全局文件进行共享(以及大多数其他事情)。如果您转到grails 2.4和assets插件,则可以执行模块化文件路径。