gpt4 book ai didi

javascript - 将 Grails GSP 自定义标记转换为 AngularJS 指令

转载 作者:行者123 更新时间:2023-12-02 15:21:05 24 4
gpt4 key购买 nike

从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com