在app.locals中保存的值数组在使用时会丢失数组格式。 这里发生了什么?
我正在创build一个date值的数组,并将其保存在一个app.locals
variables中,如下所示:
prepDataList.forEach(function(item){ var str = item.createdAtDate.toDateString(); //str = str.substring(4, 10); labelsArray.push(str); countsArray.push(item.radarCount); }); app.locals.chart1LabelsArray = labelsArray; app.locals.chart1CountsArray = countsArray; console.log("App locals labels array: ", app.locals.chart1LabelsArray);
console.log()
结果如下所示:
App locals labels array: [ 'Thu Mar 26 2015', 'Fri Mar 27 2015', 'Sat Mar 28 2015', 'Sun Mar 29 2015', 'Mon Mar 30 2015' ]
所以app.locals.chart1LabelsArray
variables似乎被正确地存储为一个数组。
现在,在我看来(或者说我的视图中的一个脚本标签),如果我调用这个variables,它似乎并不保留它的数组格式。
- 对象的types只是
[Object object]
。 - 我不能执行任何function,如
forEach
- 结果似乎也不是一个string,因为我不能运行
.split(',');
命令就可以了。
代码:
console.log(<%= chart1LabelsArray %>);
结果在这个错误:
[Error] SyntaxError: Unexpected identifier 'Mar'. Expected ')' to end a argument list. (anonymous function)
我也尝试了一个整数数组,似乎也困扰着同样的问题。
当我检查浏览器中的元素,对于上面的行,这里是我所看到的:
console.log(Thu Mar 26 2015,Fri Mar 27 2015,Sat Mar 28 2015,Sun Mar 29 2015,Mon Mar 30 2015);
所以看起来,我在<%= chart1LabelsArray %>
创build的app.locals
variables被拉起来了,而不是数组。 它们是作为一组连续的值出现的,这些值似乎不能用任何string或集合相关函数访问。
任何人都知道我错过了什么?
编辑我没有注意到你是模板到JavaScript。 下面的段落不太相关。 所有你需要的是当你在数组中模板时调用JSON.stringify()
。
所有脚本必须在lodash标签内
<%= for(var i=0; i<chart1LabelsArray.length; i++){ %> <span> label is <%= chart1LabelsArray[i] %></span> <% } %>
PS,对于任何比静态数据列表更复杂的东西,我倾向于将所有数据传递给客户端JS,而不是在服务器端模板中操作DOM。 我特别不喜欢用每个请求的模板生成不同的脚本。
<body data-labels="<%= JSON.stringify(chart1LabelsArray) %>" ng-app="chartApp"> </body> <script> var labels = JSON.parse($('body').data(labels)) </script>