AngularJS:NG-开关,当与OR(AngularJS: ng-switch-when wit

2019-07-18 15:17发布

是否有可能有一个或NG-开关时?

<div ng-repeat="w in windows" ng-show="visibleWindowId == w.id" ng-switch="w.type">
    <div ng-switch-when="val1 **OR** val2">
        sup
    </div>
</div>

如果没有,怎么可能上面的实现呢?

谢谢 :)

Answer 1:

ngswitch只允许您比较单一的状况。

我你正在寻找测试多个条件,您可以使用ng-if可用的1.1.5版本

参考

需要注意的是重要的,使用ng-ifng-switch 从DOM中删除元素的结构,而不是显示和隐藏。

当你遍历DOM寻找元素,这是非常重要的。



Answer 2:

这是现在可以使用ng-switch-when-separator将其加入到角文档中1.5.10:

<div ng-repeat="w in windows" ng-show="visibleWindowId == w.id" ng-switch="w.type">
    <div ng-switch-when="val1|val2" ng-switch-when-separator="|">
        sup
    </div>
</div>


Answer 3:

这将工作太

 <div ng-repeat="w in windows" ng-switch="w.type == 'val1' || w.type == 'val2'"> <div ng-switch-when="true"> sup </div> </div> 



Answer 4:

我创建了地方的简单指令ngSwitchWhen ,使您可以为单个标签指定多个案件。 它还允许你指定动态值,而不是纯粹的静态值。

有一点需要注意,它仅在编译时计算表达式一次,所以你必须立即返回正确的值。 对于我而言,这是罚款,我想使用的应用程序的其他地方定义的常量。 它也许可以被修改,以动态地重新评估表达但这需要更多的测试ngSwitch

我使用的角度1.3.15,但我跑了一个快速的测试与角1.4.7和它工作得很好那里。

Plunker演示

代码

module.directive('jjSwitchWhen', function() {
    // Exact same definition as ngSwitchWhen except for the link fn
    return {
        // Same as ngSwitchWhen
        priority: 1200,
        transclude: 'element',
        require: '^ngSwitch',
        link: function(scope, element, attrs, ctrl, $transclude) {
            var caseStms = scope.$eval(attrs.jjSwitchWhen);
            caseStms = angular.isArray(caseStms) ? caseStms : [caseStms];

            angular.forEach(caseStms, function(caseStm) {
                caseStm = '!' + caseStm;
                ctrl.cases[caseStm] = ctrl.cases[caseStm] || [];
                ctrl.cases[caseStm].push({ transclude: $transclude, element: element });
            });
        }
    };
});

用法

Controller
  $scope.types = {
      audio: '.mp3', 
      video: ['.mp4', '.gif'],
      image: ['.jpg', '.png', '.gif'] // Can have multiple matching cases (.gif)
  };
Template
  <div ng-switch="mediaType">
    <div jj-switch-when="types.audio">Audio</div>

    <div jj-switch-when="types.video">Video</div>

    <div jj-switch-when="types.image">Image</div>

    <!-- Even works with ngSwitchWhen -->
    <div ng-switch-when=".docx">Document</div>

    <div ng-switch-default>Invalid Type</div>
  <div>


Answer 5:

你可以使用ng-class ,这样就可以使用or在您的表达式运算符。 此外,角UI有if指令。



文章来源: AngularJS: ng-switch-when with an OR