如何跨 HTML go-gin 的所有 js 文件访问变量
How to access a variable across all js files of an HTML go-gin
我正在使用 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 代码中,但是在插入 [ 的结果时没有添加引号=20=],因为它是 int
.
类型的值
另请注意,您应该使用独特的命名策略,以避免与现有变量或可能在其他 Javascript 代码中使用的变量发生冲突。通常是一个特殊的前缀(或后缀)。
另请查看此相关问题:Referencing Go array in Javascript
我正在使用 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 代码中,但是在插入 [ 的结果时没有添加引号=20=],因为它是 int
.
另请注意,您应该使用独特的命名策略,以避免与现有变量或可能在其他 Javascript 代码中使用的变量发生冲突。通常是一个特殊的前缀(或后缀)。
另请查看此相关问题:Referencing Go array in Javascript