少し違うアプローチが欲しかった。私は他のいくつかの方法を試しましたが、ここに私がそれらについて気に入らなかったいくつかのことがあります:
- Angularのデフォルト
{{obj.property}}
のブラケットを別のものに変更することは悪い考えです。主に、非標準の角度構成を認識していないサードパーティコンポーネントの使用を開始するとすぐに、それらのサードパーティコンポーネントのバインディングが機能しなくなります。また、AngularJSチームは、複数のバインディング表記を許可するルートを望んでいないようです。この問題を確認してください。
- 私はMustacheテンプレートがとても好きで、この小さな問題のためにプロジェクト全体を別のものに切り替えたくありません。
- かなりの数の人が、クライアント側とサーバー側のレンダリングを混在させないことを推奨しています。私は完全には同意しません。角度のあるページがほとんどなく、静的なページ(私たちや利用規約のページなど)がいくつかある複数ページのWebサイトを構築している場合は、サーバー側のテンプレートを使用して作成するのはまったく問題ありません。それらのページをより簡単に維持します。ただし、Angularのパーツについては、サーバー側のレンダリングを混在させないでください。
私の答えはわかりません。NodeJSとExpressを使用している場合は、次のようにする必要があります。
{{}}
角のある部分のバインディングを次のようなもの{[{}]}
(または完全にユニークなもの)に置き換えます
次に、ルーティングで、renderメソッドにコールバックを追加します。
app.get('/', function(req, res){
res.render('home', {
title: 'Awesome Website',
description: 'Uber Awesome Website'
}, function(err, html){
var htmlWithReplacedLeftBracket = html.replace(/{\[{/g, '{{');
var finalHtml = htmlWithReplacedLeftBracket.replace(/}\]}/g, '}}');
res.send(finalHtml);
});
});
これにより、MustacheをAngularJSと一緒に使用できるようになります。実行できる改善の1つは、そのメソッドを別のモジュールに抽出して、すべてのルートで再利用することです。