使用快递把手和angularJS

背景

我目前正在构build一个使用NodeJS服务器的网站, Express Handlebars (只是Handlebars,但服务器端),并希望AngularJS的一些客户端的东西。

问题

AngularJS和Handlebars使用相同的语法模板
{{foo}}
这会导致AngularJS代码首先被Express Handle解释的问题,然后它会抛出一个错误,因为它试图拉取的数据只存在于Angular not Node中。

问题

有没有办法让AngularJS和Express车把一起工作?

可能的解决scheme

  • 改变AngularJS的语法
    • 我在看BackboneJS,它看起来像是可以改变语法。 AngularJS可能有类似的东西。
  • 在快速把手中创build一个辅助工具。
    • 它只会返回未parsing的内容。 但是我无法弄清楚如何做到这一点。

你的第一个解决scheme是可能的,AngularJS允许像这样改变文本插值的开始/结束符号:

 appModule.config(function($interpolateProvider) { $interpolateProvider.startSymbol('{[{'); $interpolateProvider.endSymbol('}]}'); }); 

那么你可以在你的模板中使用它:

 <div>{[{message}]}</div> 

另请参阅: $ interpolateProvider文档

希望这可以帮助。

您可以始终使用ng-bind语法:

<p ng-bind="user.profile.description"></p>
这是相同的
<p>{{user.profile.description}}</p>

从ngBind的Angular文档:

通常情况下,您不直接使用ngBind,而是使用类似但较为冗长的{{expression式}}这样的双curl标记。

如果在Angular编译之前浏览器在原始状态下暂时显示模板,则最好使用ngBind代替{{expression式}}。 由于ngBind是一个元素属性,因此在页面加载时,绑定对用户是不可见的。

为了保持AngularJS风格,你的第二个解决scheme更好, 在快速把手中创build一个帮手。

参考Handlebars网站: http : //handlebarsjs.com/block_helpers.html ,你可以注册一个帮手raw-helper

 Handlebars.registerHelper('raw-helper', function(options) { return options.fn(); }); 

并将其用在你的hbs模板中,把它放在一个四元存储 {{{{

 {{{{raw-helper}}}} <div class="container" ng-controller="AppCtrl"> Total Members: {{members.length}} </div> {{{{/raw-helper}}}} 

有一个更好的方法:\ {{foo}}。 Handlebars内容可能以两种方式之一逃脱,内联逃脱或原始块助手。 通过在\中加上胡须块前缀创build的内联转义。 原始块使用{{{胡子括号。 你可以看到这个http://handlebarsjs.com/expressions.html#helpers

我build议使用AngularJS的数据绑定语法(看起来和Handlebars类似),并让你的NodeJS服务器只提供静态的AngularJS源代码。 我更喜欢将模板卸载到客户端,因此减less了服务器的压力,更不要说AngularJS和其他MVC框架(我最喜欢的是EmberJS)对于dynamic构build网页来说是非常好的。

我是Yeoman的粉丝,这是一个用于构buildNodeJS服务的Angular项目的生成器: https : //github.com/yeoman/generator-angular