2015-10-16 12 views
7

角度コントローラにejを使用してノードサーバからデータを渡そうとしているので、コントローラがロードされたときに使用できるようになりました(角度ルータまたはUIルータには関心がない)。 (Expressを使用して)角度コントローラでEJSデータを取得

ノードサーバー:

app.get('/', function(req, res) { 
    res.render('index', { 
    names: ["Daniel", "Sarah", "Peter"] 
    }); 
}); 

角度コントローラ:これが不可能な場合Uncaught SyntaxError: Unexpected token <

.controller('NamesController', function ($scope) { 
    var info = <%= names %>; 
}); 

これは私に次のエラーを与える行います、私はプレロードされた方法の提案を聞くのが大好きだ私のページのデータ。

答えて

8

私は、アレイの文字列化バージョンを渡したい - クライアント上でそれを解析:(これはあなたのコントローラがあなたのEJSページ内にあるとみなされます)

app.get('/', function(req, res) { 
    res.render('index', { 
     names: JSON.stringify(["Daniel", "Sarah", "Peter"]) 
    }); 
}); 

そして、それを引用することを忘れないでください!

.controller('NamesController', function ($scope) { 
    var info = JSON.parse('<%= names %>'); 
}); 

あなたのコントローラは、独自のファイル内にある場合、あなたはngInitメソッドを使用することができます

<div ng-init="init('<%= names %>')"></div> 

と解析:

$scope.init = function(stringifiedArray) { 
    var info = JSON.parse(stringifiedArray); 
} 
+0

ニース。私はng-initで動作するようにしましたが、なぜ私はそれを他の方法でも動作させることができないのが分かりました。コントローラーは、ejsファイルの親divのng-controllerを通じてロードされます。他のejsファイルにejsインクルードによってロードされます。なぜそれがうまくいかないのだろうか? –

+0

@DanielFalabella - JavaScriptはEJSファイルの中にあります。 – tymeJV

+0

うん。それは内部にある。 –

関連する問題