我有一个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(未找到)
这是有道理的,因为它不是部分模板的位置。它会在哪里?如何将该信息隔离到插件中但可供所有下游应用程序使用?如果可以的话,我想避免定义内联模板。
**编辑包含结构**
插件结构:
引用我的插件的应用程序的结构:
**编辑包括结构后资产 - 插件 - 开关** 没有更多资源定义,BuildConfig.groovy现在引用资产pipline而不是Resources,web-app中没有更多文件
答案 0 :(得分:2)
使用Grails资源插件
请参阅使用sample grails app的this 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
插件,则可以执行模块化文件路径。