如何使用ng-switch来满足多个相同的条件?

时间:2013-07-23 08:55:20

标签: angularjs

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

我使用ng-switch

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

HTML监听非常接近,因为Bootrap具有流畅的布局。 span3span9必须位于row-fluid容器div的正下方,否则它将无法漂浮。所以我不能为它引入额外的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>

请参阅我的简化fiddle

3 个答案:

答案 0 :(得分:3)

Angular 1.1.5支持ng-if。你可以看看that。那么你可以有独立的条件。

答案 1 :(得分:1)

有人覆盖了ngSwitchWhen指令以包含允许||的选项运营商,您可以在此处找到原始回复:http://docs.angularjs.org/api/ng.directive:ngSwitch来自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;
  });
});

答案 2 :(得分:0)

不幸的是,ng-switch指令仅支持自AngularJS版本1.1.3以来的多个匹配。

请参阅changelog和此commit作为参考。