Jade,Angular和ngSwitch

时间:2013-03-29 15:02:52

标签: angularjs pug angular-ui

由于某种原因我使用ng-switch时出现问题,即使模型已更新,视图也不会切换。它总是显示默认视图(仅用于测试),所有内容都应该在完整的html中正常运行,如此测试http://plnkr.co/edit/fKlPKy?p=preview所以我想这是来自jade:

    .btn-group(data-toggle='buttons-radio', style='float:right; margin-right:20px;')
      .btn(ng-model='displayType', btn-radio="'grid'")
        i.icon-th
      .btn(ng-model='displayType', btn-radio="'list'")
        i.icon-align-justify

  .switch(ng-switch, on='displayType')
    .switch(ng-switch-when='grid')
      include gridView
    .switch(ng-switch-when='list')
      include listView
    pre(ng-switch-default) {{displayType}}

我可以在默认视图中看到displayType已正确更新为“网格”或“列表”,具体取决于所选的广播

更新了该地区的完整HTML:

<div ng-controller="cardCtrl" class="container ng-scope">
  <div class="card-list-header">
    <div class="card-search">
      <div align="center" class="input-append">
        <input type="text" ng-model="searchterm" placeholder="Type in filter criteria and press Enter..." ui-keypress="{13:'keypressCallback($event)'}" class="input-xxlarge ng-valid ng-dirty"><span ng-click="addCard()" class="add-on">+</span>
      </div>
    </div>
    <div data-toggle="buttons-radio" style="float:right; margin-right:20px;" class="btn-group">
      <div ng-model="displayType" btn-radio="'grid'" class="btn ng-pristine ng-valid active"><i class="icon-th"></i></div>
      <div ng-model="displayType" btn-radio="'list'" class="btn ng-pristine ng-valid"><i class="icon-align-justify"></i></div>
    </div>
  </div>
  <div ng-switch="ng-switch" on="displayType" class="switch">
    <!-- ngSwitchWhen: grid -->
    <!-- ngSwitchWhen: list -->
    <!-- ngSwitchDefault: ng-switch-default -->
    <pre ng-switch-default="ng-switch-default" class="ng-scope ng-binding">grid</pre>
  </div>
</div>

2 个答案:

答案 0 :(得分:5)

正如上面的评论中所讨论的那样,ng-switch="ng-switch"搞乱了ng-switch指令处理。 ng-switch="displayType"有效,所以这个Jade语法应该可以工作:

.switch(ng-switch='displayType')

答案 1 :(得分:1)

我遇到了同样的问题 - 我的第一个修复只是将.ng中的“ng-switch on”括在引号中,以便将其视为单个属性 - 否则它将转换为两个单独的html属性。生产

<div ng-switch on="displayType" class="switch">

你会用

.switch("ng-switch on"="displayType")

但是因为on是可选的(有人可能认为文档中的样本误导了它包含它),更好的方法是完全省略有问题的“on”(如前面的答案),如下所示:

.switch(ng-switch="displayType")

您可以使用an online jade to html tool

调试此类事情