Gin使用html模板--將結構體、切片傳至前端


Gin使用html模板--將結構體、切片傳至前端

本文實現一個管理系統左邊菜單欄的動態顯示,頁面使用的是adminLTA模板中的starter.html

1.定義結構體

type LeftAside struct {
	NavTree NavTree   `json:"navtree"`
	NavItem []NavItem `json:"navitem"`
}

type NavTree struct {
	Name string `json:"name"`
	Icon string `json:"icon"`
}

type NavItem struct {
	Href string `json:"href"`
	Name string `json:"name"`
}

結構體的json示例

[
{"navtree":{"name":"starter pages","icon":"nav-icon fas fa-tachometer-alt"},"navitem":[{"href":"/aaaa/bbb","name":"功能一"},

{"href":"/aaaa/ccc","name":"功能二"}]},
{"navtree":{"name":"main pages","icon":"nav-icon fas fa-tachometer-alt"},"navitem":[{"href":"/aaaa/bbb","name":"功能一"},

{"href":"/aaaa/ccc","name":"功能二"}]}
]

2.建立html模板文件夾

3.利用gin加載html模板

[
r.LoadHTMLGlob("templates/*") //templates文件夾下所有模板文件
]

4.將左邊欄菜單結構體對象返回至指定的前端html模板頁面

lfetasides := []LeftAside{ //方法1:初始化結構體
			{NavTree: NavTree{Name: "startpages", Icon: "nav-icon fas fa-tachometer-alt"},
				NavItem: []NavItem{{Href: "/aaa/bbb", Name: "功能一"}, {Href: "/aaa/ccc", Name: "功能二"}}},
			{NavTree: NavTree{Name: "mainpages", Icon: "nav-icon fas fa-tachometer-alt"},
				NavItem: []NavItem{{Href: "/aaa/eee", Name: "功能三"}, {Href: "/aaa/fff", Name: "功能四"}}},
		}

		aaa := []LeftAside{}
		for i := 0; i <= 10; i++ { //方法2:循環給結構體賦值

			aaa = append(aaa, LeftAside{NavTree: NavTree{Name: "startpages" + strconv.Itoa(i), Icon: "nav-icon fas fa-

tachometer-alt"},
				NavItem: []NavItem{{Href: "/aaa/bbb", Name: "功能一"}, {Href: "/aaa/ccc", Name: "功能二"}}})

		}
		dataM2, err := json.Marshal(aaa)
		if err != nil {
			fmt.Printf("序列化錯誤 err = %v\n", err)
		}
		fmt.Println(string(dataM2))
		c.HTML(http.StatusOK, "hello.html", gin.H{
			"lists":   lfetasides,
			"jsonres": string(dataM2),
			"tt":      aaa,
		})

5.前端html模板頁面加載數據

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>
		對象:{{ .lists }}
    </h1>
    <br>
    <h1>
		字符串:{{ .jsonres }}
    </h1>
    <br>
    <hr>
    {{range .tt}}
        <h3>{{.NavTree.Name }}</h3>
        <h3>{{.NavTree.Icon }}</h3>
        {{range .NavItem}}
        <h6>{{.Name}}</h6>
        {{end}}
    {{end}}
    <br>
    <hr>
 
</body>
</html>

效果圖

完整gin代碼

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
)

type LeftAside struct {
	NavTree NavTree   `json:"navtree"`
	NavItem []NavItem `json:"navitem"`
}

type NavTree struct {
	Name string `json:"name"`
	Icon string `json:"icon"`
}

type NavItem struct {
	Href string `json:"href"`
	Name string `json:"name"`
}

func main() {
	r := gin.Default()
	r.LoadHTMLGlob("templates/*")
	r.GET("/ping", func(c *gin.Context) {
		ipAddr := c.ClientIP()
		fmt.Println(ipAddr)
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	r.GET("/test", func(c *gin.Context) {

		lfetasides := []LeftAside{ //方法1:初始化結構體
			{NavTree: NavTree{Name: "startpages", Icon: "nav-icon fas fa-tachometer-alt"},
				NavItem: []NavItem{{Href: "/aaa/bbb", Name: "功能一"}, {Href: "/aaa/ccc", Name: "功能二"}}},
			{NavTree: NavTree{Name: "mainpages", Icon: "nav-icon fas fa-tachometer-alt"},
				NavItem: []NavItem{{Href: "/aaa/eee", Name: "功能三"}, {Href: "/aaa/fff", Name: "功能四"}}},
		}

		aaa := []LeftAside{}
		for i := 0; i <= 10; i++ { //方法2:循環給結構體賦值

			aaa = append(aaa, LeftAside{NavTree: NavTree{Name: "startpages" + strconv.Itoa(i), Icon: "nav-icon fas fa-tachometer-alt"},
				NavItem: []NavItem{{Href: "/aaa/bbb", Name: "功能一"}, {Href: "/aaa/ccc", Name: "功能二"}}})

		}
		dataM2, err := json.Marshal(aaa)//測試結構體轉化為json
		if err != nil {
			fmt.Printf("序列化錯誤 err = %v\n", err)
		}
		fmt.Println(string(dataM2))
		c.HTML(http.StatusOK, "hello.html", gin.H{
			"lists":   lfetasides,//傳遞給前端的值
			"jsonres": string(dataM2),
			"tt":      aaa,
		})
	})

	r.Run(":8062")
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM