在Javascript中引用Go数组

use*_*310 3 html javascript go go-templates

我有一个Golang数组,我正在传递给前端的html文件.

我知道

'{{ index .Array 0}}' 
Run Code Online (Sandbox Code Playgroud)

工作并从数组中提取第一个元素.但我想做一个Javascript for循环并打印数组中的每个元素,就像这样

<script type="text/javascript">
function loop() {

    html = ""
    for(var i = 0; i<5; i++) {
        html += "{{ index .Array " + i + "}}";
      }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.关于分离go数组索引字符串的东西,HTML/Javascript不喜欢它,它不会加载.

这是一个语法错误,我无法确定.

有任何想法吗?

icz*_*cza 10

你需要了解一些事情:

模板操作,例如在Go应用程序的服务器{{index .Array 0}}执行.

Javascript代码在浏览器中的客户端进行解释和运行.

模板操作中使用的模板参数值(Array在您的示例中)在客户端不存在(例如,作为Javascript对象).并且Javascript代码不是由模板引擎运行的.因此模板参数(值)和Javascript(执行)存在于2个不同的"空格"中.

话虽如此,不可能混合模板动作/变量和Javascript执行.

你有2个选择:

1)做你想做的模板动作.

2)使用模板创建Javascript代码,当在客户端执行时,将构造/重新创建数组作为Javascript对象,以便它可用于进一步的Javascript处理.

请注意,如果您只想循环遍历数组一次,则无需创建Javascript数组,您只需呈现将作为{{range}}模板操作中的循环体的JavaScript代码.以西蒙的答案为例.

阐述#1

您可以使用{{range .Array}}操作循环Array,并为每个元素执行块,将管道设置为数组元素,以便您可以输出如下所示的数组元素:

{{range .Array}}
    {{.}}
{{end}}
Run Code Online (Sandbox Code Playgroud)

当然,您可以在块中放置任何其他内容,而不仅仅是数组元素.您甚至可以像这样访问当前索引:

{{range $idx, $value := .Array}}
    Index = {{$idx}}; Element = {{$value}}<br>
{{end}}
Run Code Online (Sandbox Code Playgroud)

阐述#2

假设你的Array包含int数字,你可以在Javascript中重新创建它并在Javascript中使用这样的模板循环它:

<script>
    var arr = [
        {{range .Array}}
            {{.}},
        {{end}}
    ];

    // Now you have a javascript array: arr, loop over it to do something:
    html = "";
    for(var i = 0; i < arr.length; i++) {
        html += " " + arr[i];
    }
</script>
Run Code Online (Sandbox Code Playgroud)

或者由于模板引擎支持将数组和切片"渲染"为JavaScript数组,因此您只需编写:

<script>
    var arr = {{.Array}};

    // Now you have a javascript array: arr, loop over it to do something:
    html = "";
    for(var i = 0; i < arr.length; i++) {
        html += " " + arr[i];
    }
</script>
Run Code Online (Sandbox Code Playgroud)