現在、サーバーに NodeJS 、 Express Handlebars (Just Handlebars but server side)を使用し、できれば AngularJS 一部のクライアント側のもの。
AngularJSとHandlebarsは、テンプレートに同じ構文を使用します{{foo}}
これにより、AngularJSコードが最初にExpress Handlebarsによって解釈され、プルしようとしているデータがAngular not not Nodeにのみ存在するためエラーがスローされます。
AngularJSとExpress Handlebarsを連携させる方法はありますか?
ng
ヘルパーを作成します。最初の解決策が可能です。AngularJSでは、次のようにテキスト補間の開始/終了シンボルを変更できます。
appModule.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('{[{');
$interpolateProvider.endSymbol('}]}');
});
次に、テンプレートで使用できます。
<div>{[{message}]}</div>
参照: $ interpolateProvider documentation
お役に立てれば。
代わりに、常にng-bind構文を使用できます。
<p ng-bind="user.profile.description"></p>
これは次と同じです<p>{{user.profile.description}}</p>
Angular ngBind のドキュメントから:
通常、ngBindは直接使用せず、代わりに{{expression}}のような二重カーリーマークアップを使用します。
Angularがコンパイルされる前にテンプレートが生の状態でブラウザに一時的に表示される場合、{{expression}}の代わりにngBindを使用することをお勧めします。ngBindは要素属性であるため、ページがロードされている間、ユーザーには見えないバインディング。
AngularJSスタイルを維持するには、2番目のソリューションの方が優れています。Express Handlebarsでヘルパーを作成します。
Handlebars Webサイトへの参照: http://handlebarsjs.com/block_helpers.html 、ヘルパーを登録できますraw-helper
Handlebars.registerHelper('raw-helper', function(options) {
return options.fn();
});
そして、quadruple-stash{{{{
{{{{raw-helper}}}}
<div class="container" ng-controller="AppCtrl">
Total Members: {{members.length}}
</div>
{{{{/raw-helper}}}}
より良い方法があります:\ {{foo}}。ハンドルバーのコンテンツは、インラインエスケープまたは生のブロックヘルパーの2つの方法のいずれかでエスケープできます。口ひげブロックの前に\を付けて作成されたインラインエスケープ。生ブロックは{{{{口ひげブレースを使用して作成されます。これを見ることができます http://handlebarsjs.com/expressions.html#helpers
AngularJSのデータバインディング構文(Handlebarに似ている)を使用することをお勧めし、NodeJSサーバーに静的なAngularJSソースコードを提供するようにします。テンプレートをクライアントにオフロードすることで、AngularJSや他のMVCフレームワーク(私のお気に入りはEmberJS)がWebページを動的に構築するのに最適であることは言うまでもなく、サーバーへの負荷を軽減します。
私は Yeoman のファンで、ここにNodeJSが提供するAngularプロジェクトを作成するためのジェネレーターがあります: https://github.com/yeoman/ generator-angular