2017-01-31 9 views
2

私はpugを使用しています。情報を得るために変数をフロントエンドに渡したいのですが、それをしようとするとテキストのように渡ります。pugからフロントエンドにオブジェクトを渡す方法javacript

これは私がそれを行う方法です。

コントローラーコード:

res.render('view/edit', { 
    title: 'Title', 
    sub:true, 
    data: variableObject 
}); 

これは、レンダリングされたビュー内のコードです:私はアクセスをcan't

script(type='text/javascript'). 
    var x = "#{data}" 
    console.log(x); 

そして、これは、ログ

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] 

の結果であり、オブジェクトはテキストなので、オブジェクトのようにオブジェクトを渡す方法はありますか?

答えて

1

:これはベストプラクティスである場合

var x = "#{ JSON.stringify(y) }" 
    console.log(JSON.parse(x.replace(/"/g,'"'))); 

- 私がわかりません。

+1

dNitroの答えと同じように、 '!{JSON.stringify(y)}'を使うとエスケープする問題が取り除かれます。 – Matt

+0

これは本当に良い答えです –

2

まずJSON.stringifyを使用して、オブジェクトを文字列化:次に

res.render('view/edit', { 
    title: 'Title', 
    sub: true, 
    data: JSON.stringify(variableObject) 
}); 

String Interpolation, Unescaped!{data}

script(type='text/javascript'). 
    var x = !{data} 
    console.log(x); 


またはちょうどあなたのテンプレートでは、一度にすべてを行うを使用します。

script(type='text/javascript'). 
    var x = !{JSON.stringify(data)} 
    console.log(x); 

(名誉@Matt、おかげで)私はこれを使用し、この場合

+0

文字列に ''が含まれていると、ブラウザはその文字列が '