使用快递把手和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