如何在Node.js中避免隐式字符串转换并正确赋值数组至$scope.names
解决Node.js中对象数组无法正确传递到Angular页面的问题
这个问题我之前也碰到过!原因很简单:当你直接把JavaScript对象和字符串拼接的时候,它会自动调用对象的toString()方法,而普通对象的toString()返回的就是[Object Object],所以Angular拿到的根本不是合法的数组,自然没法渲染数据。
解决方案:用JSON.stringify()转换对象为JSON字符串
你只需要把拼接cc的地方换成JSON.stringify(cc),它会把你的对象数组转换成标准的、可被JavaScript解析的JSON字符串,这样Angular就能正确识别并使用这个数组了。
修改后的完整代码如下:
var cc = [{"keyword":"a","message":"y"}]; // 使用JSON.stringify将cc转换为合法的JSON字符串 var cont = '<!DOCTYPE html><html><body><div ng-app="myApp" ng-controller="reportCtrl"> <table><tr ng-repeat="x in names"><td>{{ x.keyword }}</td><td>{{ x.message }}</td></tr></table></div><script>var app = angular.module("myApp", []);app.controller("reportCtrl", function($scope) {$scope.names= ' + JSON.stringify(cc) + ' ;});</script></body></html>'; // 写入HTML文件的代码保持不变 fs.writeFile('myPage.html', cont, (err) => { if (err) throw err; console.log('Saved!'); });
为什么这样有效?
JSON.stringify(cc)会把你的数组转换成字符串形式的[{"keyword":"a","message":"y"}],当HTML页面加载时,这段脚本会被解析成一个真实的JavaScript数组对象,$scope.names就能正确拿到数据,ng-repeat也就能正常遍历渲染表格内容了。
另外,JSON.stringify()还会自动处理对象中的特殊字符(比如引号、换行符),避免这些字符破坏HTML或JavaScript的语法结构,比手动拼接字符串安全得多。
内容的提问来源于stack exchange,提问作者Krishna Kanth Juluru
相关产品推荐
相关产品推荐

