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

标签 javascript angularjs grails

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

相关文章:

Javascript - 如何从类中调用类中的函数?

javascript - 如何在单个 AngularJS 上下文中设置多个选择元素的选定值

javascript - angularjs fullcalendar eventclick范围

grails - 需要帮助,如果大于,则Grails mongodb,否则大于

grails - grails spring-security-core如何访问支架式页面

javascript - 模板中的 Jquery 列表项单击时隐藏/显示

javascript - IE8 修复了多个下拉框的下拉问题

javascript - $watch 在 Angular Modal 中不工作

javascript - Angular.js 路由似乎不起作用

grails - 无法初始化代理 - 无 session ,正在访问过滤器类中的 session 对象