2015-12-02 54 views
0

從Grails的/ GSP自定義標籤轉換爲AngularJS指令轉換的Grails GSP定製標籤AngularJS指令

我有一個現有的Grails/GSP標記庫,將產生將由遠程服務器,加載內容顯示一個鏈接從本地服務器。鏈接中的URL必須是完整路徑。自定義的GSP標籤可讓我在GSP中指定正確的操作。我需要使用AngularJS來替換它,並且我明白指令是要走的路。是否有一種簡單的方法將參數從 GSP中的標籤傳遞給指令?

是在「grailsLinkGenerator」我可以用它來生成指令裏面的網址有同等功能?

我現有的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開關中顯示遠程內容:

<div ng-switch-when='alpha' ><div alpha-directive></div></div> 

到目前爲止,我想出了這個指令,但必須有一個更好的辦法?有沒有像AngularJS中的grails鏈接生成器?我仍然需要將ID添加到URL中。

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

你想傳遞什麼參數?我使用grails和angular,我想我可以幫忙,但我很難知道你想要生成什麼。 – tylerwal

+0

它只需要從GSP中的select中傳入一個ID。基本上用戶正在選擇要顯示的內容。舊的純GSP代碼剛過就到自定義標籤的使用id = $ {} ent.id一個PARAM,但在新的AngularJS代碼,該ID是從一個輸入的到來,並且需要被附加到模板URL。我同意克里斯托弗的答案,它不好使javascript生成URL。我是AngularJS的新手。 – J21042

回答

2

好吧,生成grails動作的絕對路徑不僅僅是一個GSP函數。這是一個Grails函數。但你真的不想混淆這兩個。你的Grails應該在後端,你的Angular應該在前端,並試圖模糊兩個將在維護地獄結束。

所以我首先建議,創建一個使用grailsLinkGenerator的端點。您傳遞所需的action的名稱並返回完整的URL。

def absoluteLink(String action) { 
    // Return the absolute path for the action. 
} 

然後,你可以寫一個角度服務與API方法如..

function getAbsoluteLink(action) { 
    // AJAX request to the server. 
} 

然後,只需有指令發出請求到服務,並且你已經有了一個指令,可以將動作名稱轉換爲完整路徑,無需構建字符串,也無需混淆前端和後端的責任。

,如果你決定改變你的API的結構,你會不會需要更改URL是如何創建的。