Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的Go数组引用_Javascript_Html_Go_Go Templates - Fatal编程技术网

Javascript中的Go数组引用

Javascript中的Go数组引用,javascript,html,go,go-templates,Javascript,Html,Go,Go Templates,我有一个Golang数组,我正在传递到前端的html文件中 我知道 '{{ index .Array 0}}' 工作并从数组中提取第一个元素。但是我想做一个Javascript for循环,并像这样打印数组中的每个元素 <script type="text/javascript"> function loop() { html = "" for(var i = 0; i<5; i++) { html += "{{ index .Array

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

我知道

'{{ index .Array 0}}' 
工作并从数组中提取第一个元素。但是我想做一个Javascript for循环,并像这样打印数组中的每个元素

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

    html = ""
    for(var i = 0; i<5; i++) {
        html += "{{ index .Array " + i + "}}";
      }
}

函数循环(){
html=“”

对于(var i=0;i你需要了解一些东西:

诸如
{{index.Array 0}}
之类的模板操作在Go应用程序的服务器端执行

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

模板操作中使用的模板参数值(
Array
在您的示例中)在客户端不存在(例如作为Javascript对象)。并且Javascript代码不由模板引擎运行。因此模板参数(值)和Javascript(执行)位于两个不同的“空间”

话虽如此,但不可能混合使用模板操作/变量和Javascript执行

您有两种选择:

1) 使用模板操作执行您想要执行的操作

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

请注意,如果只想在数组上循环一次,则无需创建Javascript数组,只需在
{{range}
模板操作中呈现将作为循环体的Javascript代码即可。请参见此示例

阐述#1 您可以使用
{range.Array}
操作在
数组
上循环,并为每个元素执行块,将管道设置为数组元素,以便您可以像这样输出数组元素:

{{range .Array}}
    {{.}}
{{end}}
{{range $idx, $value := .Array}}
    Index = {{$idx}}; Element = {{$value}}<br>
{{end}}
<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>
当然,您可以将任何其他内容放入块中,而不仅仅是数组元素。您甚至可以像这样访问当前索引:

{{range .Array}}
    {{.}}
{{end}}
{{range $idx, $value := .Array}}
    Index = {{$idx}}; Element = {{$value}}<br>
{{end}}
<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>
或者,由于模板引擎支持将数组和切片“呈现”为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>

var arr={{.Array};
//现在您有了一个javascript数组:arr,在其上循环执行以下操作:
html=“”;
对于(变量i=0;i
您没有“将Golang数组传递到前端”。您的模板将呈现在服务器端。这是一个重要的区别

当你这样想时,语法问题就变得很清楚了。你试图在表达式中间把GO的模板语法和JavaScript混合在一起。这是不正确的。你应该使用一个GO循环,当呈现时,为客户生成有效的JavaScript来消费:

var javaScriptHtmlVariable = "";

{{ range .Array }}
    javaScriptHtmlVariable += '{{.}}';
{{ end }}
这将导致:

javaScriptHtmlVariable += 'One';
javaScriptHtmlVariable += 'Two';
javaScriptHtmlVariable += 'Three';
javaScriptHtmlVariable += 'Four';
// etc..

代码生成一个字符串“{index.Array0}{{{index.Array1}}{{index.Array2}{{index.Array3}{{index.Array4}”。.Array和数字之间没有空格。不,对不起,即使有空格,我也编辑了它以显示这一点