1

我想根据身份验证状态用 AngularJS 创建一段 HTML。

我用ng-switch.

问题是我想在一个条件下多次点击,但 AngularJS 只满足最后一个条件。

由于具有流畅布局的 Bootrap,HTML 听得非常接近。span3andspan9必须在容器 div的正下方row-fluid,否则它不会很好地浮动。所以我不能ng-switch给它引入额外的 div ......

<div class="row-fluid" ng-switch on="user.isAuthenticated">
<div class="span3" ng-switch-when="true"><div>
<div class="span9 spade-contentwrapper" ng-switch-when="true"><div>
<div class="spade-contentwrapper" ng-switch-when="false"><div>
<div>

见我的简化小提琴

4

3 回答 3

3

Angular 1.1.5 支持ng-if. 你可以看看那个。然后你可以有独立的条件。

于 2013-07-23T09:11:56.157 回答
1

有人重写了 ngSwitchWhen 指令以包含允许 || 的选项。运营商,您可以在此处找到原始响应:http://docs.angularjs.org/api/ng.directive: ngSwitch by angabriel

config(function($routeProvider, $provide) {
/**
* overwrite angular's directive ngSwitchWhen
* can handle ng-switch-when="value1 || value2 || value3"
*/
    $provide.decorator('ngSwitchWhenDirective', function($delegate) {
    $delegate[0].compile = function(element, attrs, transclude) {
        return function(scope, element, attr, ctrl) {
          var subCases = [attrs.ngSwitchWhen];
          if(attrs.ngSwitchWhen && attrs.ngSwitchWhen.length > 0 && attrs.ngSwitchWhen.indexOf('||') != -1) {
          subCases = attrs.ngSwitchWhen.split('||');
        }
        var i=0;
        var casee;
        var len = subCases.length;
        while(i<len) {
            casee = $.trim(subCases[i++]);
            ctrl.cases['!' + casee] = (ctrl.cases['!' + casee] || []);
            ctrl.cases['!' + casee].push({ transclude: transclude, element: element });
        }
    }
    }
    return $delegate;
  });
});
于 2013-10-02T21:01:02.153 回答
0

不幸的是,ng-switch 指令从 AngularJS 1.1.3 版本开始只支持多个匹配。

请参阅更改日志和此提交作为参考。

于 2013-07-23T09:37:50.070 回答