从 Grails/GSP 自定义标记转换为 AngularJS 指令
我有一个现有的 Grails/GSP 标记库,它将生成一个链接,该链接将由远程服务器显示,从本地服务器加载内容。链接中的 URL 必须是完整路径。自定义 GSP 标签让我可以在 GSP 中指定操作。我需要使用 AngularJS 替换它,并且我知道指令是可行的方法。有没有一种简单的方法来传递参数 将 GSP 中的标签放入指令中?
是否有与“grailsLinkGenerator”等效的函数,可以用来在指令内生成 URL?
我现有的 Grails/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>"
};
});
最佳答案
嗯,生成 grails 操作的绝对路径不仅仅是一个 GSP
函数。这是一个 Grails 函数。但你真的不想混淆这两者。你的 Grails 应该在后端,你的 Angular 应该在前端,试图模糊两者将会导致维护 hell 。
因此,我建议首先使用 grailsLinkGenerator
创建端点。您传入所需操作
的名称,它会返回完整的 URL。
def absoluteLink(String action) {
// Return the absolute path for the action.
}
然后您可以使用 API 方法编写一个 Angular 服务,例如..
function getAbsoluteLink(action) {
// AJAX request to the server.
}
然后只需让指令向服务发出请求,您就得到了一个指令,可以将操作的名称转换为完整路径,而无需构建字符串,也无需混淆职责你的前端和后端。
而且,如果您决定更改 API 的结构,则无需更改 URL 的创建方式。
关于javascript - 将 Grails GSP 自定义标记转换为 AngularJS 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34050836/