如何从Grails插件提供的JS文件中指向AngularJS模板?
我有一个Grails应用程序,它引入了几个Grails插件。这些插件需要被其他几个Grails应用程序重用,而不仅仅是我自己的 在Grails插件之一的资源包中,我定义了以下内容: 为了完整起见,我保留了这一点,但后来我切换到了资产管道 在其中一个插件的Javascript文件中,我定义了以下指令:如何从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: {
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
- 应用程序属性
- grails应用程序
- 形态
- BuildConfig.groovy
- 控制器
- 插头A.groovy
- 插头B.groovy
- 领域
- PluginDomainA.groovy
- 资产
- Java脚本
- 方向
- directivea.js
- directivea.html
- 服务
- restapis.js
- 方向
- 应用程序属性
- pluginnamefrailsgrailsplugin.groovy
- Java脚本
- 形态
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/**']