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

时间:2015-12-02 19:00:35

标签: javascript angularjs grails

从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>"
  };
});

1 个答案:

答案 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的结构,则无需更改网址的创建方式。