gpt4 book ai didi

javascript - 如何跨 HTML go-gin 的所有 js 文件访问变量

转载 作者:IT王子 更新时间:2023-10-29 01:09:41 28 4
gpt4 key购买 nike

我正在使用 gin 模板并呈现我使用的 HTML

c.Writer.Header().Set("username", "myname")
c.HTML(200, "myservices", gin.H{
"title": "Dashboard",
"username": "myname" })

我想传递一个变量(用户名),以便我可以在附加到我的模板的 js 文件中访问它。我可以使用 {{.username}} 访问模板中的用户名变量。如何使其成为全局的,以便我也可以跨所有 js 文件访问它。我尝试在 header 中设置它,但只有在加载 HTML 时我才能访问它。在加载模板之前我将无法使用它。

最佳答案

您可以在创建 Javascript 变量的 HTML 页面(例如 <head> 部分)中插入 Javascript 代码,并使用传递给模板执行的参数初始化它们。

看这个例子:

func main() {
t := template.Must(template.New("").Parse(templ))
m := map[string]interface{}{
"title": "Test page",
"username": "bob",
"counter": 12,
}
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
}

const templ = `<html><head>
<script>
var _title = {{.title}};
var _username = {{.username}};
var _counter = {{.counter}};
</script>
</head><body>
</body>
</html>`

这会生成一个 HTML 文档(在 Go Playground 上尝试):

<html><head>
<script>
var _title = "Test page";
var _username = "bob";
var _counter = 12 ;
</script>
</head><body>
</body>
</html>

这意味着页面中的其他 Javascript 代码(内联或引用、外部)将看到变量 _title , _username , _counter并将它们用作常规变量,并使用我们传递给 Template.Execute() 的值对其进行初始化.

请注意 html/template 包执行上下文转义。看到它插入了 {{.title}} 的结果在引号中,因为它是 string这就是它应该用 Javascript 代码编写的方式,但是在插入 {{.counter}} 的结果时没有添加引号, 因为它是 int 类型的值.

另请注意,您应该使用独特的命名策略,以避免与现有变量或可能在其他 Javascript 代码中使用的变量发生冲突。通常是一个特殊的前缀(或后缀)。

另请查看此相关问题:Referencing Go array in Javascript

关于javascript - 如何跨 HTML go-gin 的所有 js 文件访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39160420/

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