从Grails / GSP自定义标记转换为AngularJS指令
我有一个现有的Grails / GSP标记库,它将生成一个链接,该链接将由远程服务器显示,从本地服务器加载内容。链接中的URL必须是完整路径。自定义GSP标记允许我在GSP中指定操作权限。我需要使用AngularJS替换它,我理解指令是要走的路。是否有一种简单的方法来传递参数 GSP中的标签进入指令?
是否有与“grailsLinkGenerator”等效的函数可用于在指令中生成URL?
我现有的Grails / GSP标签看起来像这样:
GSP:
<g:myRemoteLink action="alpha" update="targetDiv" id="${ent.id}" >Show Alpha</g:myRemoteLink>
MyTagLib.groovy:
def myRemoteLink = { attrs, body ->
def link = g.remoteLink( attrs, body )
def fullLink = link.replace( grailsLinkGenerator.contextPath, grailsLinkGenerator.serverBaseURL )
out << fullLink.toString()
}
我需要将其转换为在ng-switch中加载/显示远程内容,如下所示:
<div ng-switch-when='alpha' ><div alpha-directive></div></div>
到目前为止,我提出了这个指令,但必须有更好的方法吗?是否有类似AngularJS中的grails链接生成器?我仍然需要传入要附加到URL的ID。
app.directive('alphaDirective', function() {
var id = $scope.id;
var baseURL = "https://myServerURL/";
var controller = "admin";
var action = "alpha";
var path = "'" + baseURL + "/" + controller + "/" + action + "/" + id + "'";
return {
template: "<div ng-include=\"" + path + "\"></div>"
};
});
答案 0 :(得分:2)
好吧,生成grails动作的绝对路径并不仅仅是GSP
函数。它是Grails的功能。但你真的不想混淆这两者。你的Grails应该在后端,你的Angular应该在前端,并试图模糊这两个将在维护地狱结束。
所以我首先建议使用grailsLinkGenerator
创建端点。您传入所需action
的名称,并返回完整的URL。
def absoluteLink(String action) {
// Return the absolute path for the action.
}
然后,您可以使用API方法编写角度服务,如<.. p>
function getAbsoluteLink(action) {
// AJAX request to the server.
}
然后只需让指令向服务发出请求,并且您已经获得了一个指令,可以将操作的名称转换为完整路径,而无需构建字符串而无需混淆你的前端和后端的责任。
如果您决定更改API的结构,则无需更改网址的创建方式。