Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用快速车把和有角度的JS 背景_Javascript_Node.js_Angularjs_Express_Handlebars.js - Fatal编程技术网

Javascript 使用快速车把和有角度的JS 背景

Javascript 使用快速车把和有角度的JS 背景,javascript,node.js,angularjs,express,handlebars.js,Javascript,Node.js,Angularjs,Express,Handlebars.js,我目前正在建立一个网站,用于服务器(只是服务器端),并希望为一些客户端的东西 问题 AngularJS和Handlebar使用相同的语法进行模板化 {{foo} 这会导致一个问题,即AngularJS代码将首先由Express Handlebar解释,然后会抛出错误,因为它试图提取的数据只存在于Angular节点中,而不存在于节点中 问题 有没有办法让AngularJS和Express车把一起工作 可能的解决方案 更改AngularJS的语法 我在看BackboneJS,看起来可以更改

我目前正在建立一个网站,用于服务器(只是服务器端),并希望为一些客户端的东西


问题 AngularJS和Handlebar使用相同的语法进行模板化
{{foo}

这会导致一个问题,即AngularJS代码将首先由Express Handlebar解释,然后会抛出错误,因为它试图提取的数据只存在于Angular节点中,而不存在于节点中


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


可能的解决方案
  • 更改AngularJS的语法
    • 我在看BackboneJS,看起来可以更改语法。可能有类似的东西是AngularJS
  • 在快速车把中创建
    ng
    辅助对象。
    • 它只会返回未解析的内容。但是我不知道怎么做

    • 您的第一个解决方案是可能的,AngularJS允许更改文本插值的开始/结束符号,如下所示:

      appModule.config(function($interpolateProvider) {
        $interpolateProvider.startSymbol('{[{');
        $interpolateProvider.endSymbol('}]}');
      });
      
      然后您可以在模板中使用它:

      <div>{[{message}]}</div>
      
      {[{message}]}
      
      另见:


      希望这有帮助。

      我建议使用AngularJS的数据绑定语法(看起来类似于Handlebar),让您的NodeJS服务器只为静态AngularJS源代码服务。我更喜欢将模板转移到客户端,从而减轻服务器的压力,更不用说AngularJS和其他MVC框架(我最喜欢的是EmberJS)非常适合动态构建网页


      我是NodeJS的粉丝,这里有一个生成器,用于构建由NodeJS提供服务的角度项目:

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


      这与
      {{user.profile.description}}


      从以下的角度文档:

      通常,您不直接使用ngBind,而是使用类似于{expression}}的双卷曲标记,但不太详细

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


      为了保持AngularJS风格,您的第二个解决方案更好,在Express Handlebar中创建一个助手。

      参考把手网站:,您可以注册一个助手
      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}}}}
      
      {{{{{raw helper}}}
      成员总数:{{Members.length}
      {{{{/raw helper}}}}
      
      有一个更好的方法:\{{foo}。
      把手内容可以通过两种方式之一进行转义,即内联转义或原始块帮助。内联转义是通过在小胡子块前面加上\来创建的。原始块是使用{{{{胡须支架。你可以看到这一点

      为什么你在服务器端使用手柄,而不是jade或ejs?手柄/棱角型最好在客户端。@jwimmer什么使手柄在客户端更好?除非有不寻常的事情,这并不意味着不应该在服务器端使用手柄我同意MV*框架非常适合动态应用构建网页,但我认为页面实例特定的部分应该被编译。任何可以通过用户交互->使用客户端模板进行更改的内容。此外-如果客户端呈现失败会发生什么?最初提供呈现模板将使您的页面更容易被更广泛的受众访问,更不用说更健壮和更容易使用lt-tolerance。但是,这条评论的要点不是在第一句话中总结的吗?“通常,您不会直接使用ngBind”。ngBind用于您遇到模板内容(FOUC)闪现的情况。我会小心偏离文档中的建议,这在它的建议中似乎非常明确,只在这种情况下使用。我更支持这篇文章的公认答案。这是一个比公认的更好的解决方案,因为这意味着你没有偏离标准的角双括号约定(您的Angular代码在其他项目中使用时更加模块化)。我更喜欢此解决方案。我所做的唯一更改是调用我的助手Angular js-to-me
      {{{{Angular js}}
      更好地解释了它的用途。它对我不起作用。我正在使用他们使用//的文档作为新标记。当我这样做时,它只是显示在我的页面上。因此,类似于:Hello//name//的内容在页面上显示为Hello//name//