2015-05-30 32 views
0

我想通过一个JSON对象到我的应用程序使用ng-init + stringify但它不起作用我得到一个Lexer错误。传递JSON对象到ng-init

Lexer Error: Unexpected nextharacter at columns 8-8 [#] in expression [friends=#{JSON.stringify(friends)}].

的Javascript

var friends = [ 
{name:'John', phone:'555-1276'}, 
{name:'Mary', phone:'800-BIG-MARY'}, 
{name:'Mike', phone:'555-4321'}, 
{name:'Adam', phone:'555-5678'}, 
{name:'Julie', phone:'555-8765'}, 
{name:'Juliette', phone:'555-5678'} 
]; 

</script> 

HTML

<div ng-init="friends=#{JSON.stringify(friends)}"></div> 

回答

2

你必须这样做,在角的方式,则可以使用angularjs的$window访问JavaScript变量和转换它到$scope变量在控制器中,并可以访问它在HTML

拿一个看看你的代码,我只是修改了一些,使其工作,

<!DOCTYPE html> 
<html ng-app="myApp"> 

<head> 
<script data-require="[email protected]" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script> 
<link rel="stylesheet" href="style.css" /> 
</head> 

<body ng-controller="myController"> 
<h1>Hello Plunker!</h1> 
<script> 
    var friends = [ 
    {name:'John', phone:'555-1276'}, 
    {name:'Mary', phone:'800-BIG-MARY'}, 
    {name:'Mike', phone:'555-4321'}, 
    {name:'Adam', phone:'555-5678'}, 
    {name:'Julie', phone:'555-8765'}, 
    {name:'Juliette', phone:'555-5678'} 
    ]; 

var app = angular.module('myApp', []); 

app.controller('myController', ['$scope', '$window', function($scope, $window) { 
    $scope.friendsInscope = $window.friends; 
}]); 

</script> 
<!--<div ng-init="friends=#{JSON.stringify(friends)}">{{friends}}</div>--> 
<div ng-init="friends=friendsInscope">{{friends|| json}}</div> 
</body> 

</html> 

Working plunker

希望这有助于!

3

你应该尝试与这些报价:

<div ng-init="friends='#{JSON.stringify(friends)}'"></div> 

我不知道什么是你的模板引擎,但EJS例如,它会是:

<div ng-init="friends='<%= JSON.stringify(friends) %>'"></div> 

此外,如果你有一些问题用一些简单或/和双打引号,你可以用这样的正则表达式替换它们:

<div ng-init="friends='<%= JSON.stringify(friends).replace(/"/g, "\\\"").replace(/'/g, "\\'") %>'"> 

我不知道这是否是最佳做法,或者不是角度,但由于这一点,我可以共享以前从服务器检索到的角度的一些数据。这样我就阻止了Angulars控制器向请求后端的公共API请求许多请求。

而在角度方面,你可以这样做:$scope.friends = JSON.parse(friends)“暴露”你的JSON。