angularjs:ng-switch-when中的多个值

我有以下ngSwitch:

<p ng-switch="status"> <span ng-switch-when="wrong|incorrect"> Wrong </span> <span ng-switch-default> Correct </span> </p> 

正如你所看到的,我有Wrong的两个选项wrongcorrect的文字。 我已经尝试(如你所见)使用pipe道| ,但是这不起作用。 有什么build议么 ?

对于angular> = v1.5.10,

你可以通过添加ng-switch-when-separator="|"ng-when节点。 请参阅文档中的示例。

 <span ng-switch-when="wrong|incorrect" ng-switch-when-separator="|"> 

请参阅这里的讨论https://github.com/angular/angular.js/issues/3410请注意,基于我的经验,它不适用于数字;…呢?

这与使用ng-if几乎是一样的,但是这样做的好处是你可以在主要的ng-switch中多次使用ng-switch-when =“true”或默认或假。

 <p ng-switch on="(status == 'wrong') || (status == 'incorrect')"> <span ng-switch-when="true"> Wrong </span> <span ng-switch-default> Correct </span> </p> 

直播: http : //jsfiddle.net/8yf15t2d/

ng-switch-when不能有多个条件。

另一种方法是使用ng-if ,但在error handling的情况下,我更愿意在控制器的作用域中填充错误variables,并使用ng-show=error

您可以将statusfilter添加到将相同的值映射到相同的值的状态。

 .filter('meaning', function() { return function(input) { input = input || ''; if (['wrong', 'amiss','awry', 'bad', 'erroneous', 'false', 'inaccurate',\ 'misguided', 'mistaken', 'unsound', 'incorrect'].indexOf(input) != -1) return 'wrong'; // You can make it generic like this: synonymsDictionary = { 'someWord' : ['syn1', 'syn2', 'syn3' ... ], 'someOtherWord' : ['otherWordSyn1', 'otherWordSyn2', 'otherWordSyn3' ...] . . . }; for (var word in synonymsDictionary) if (synonymsDictionary[word].indexOf(input) != -1) return word; // This way you could iterate over a bunch of arrays... // Edge case else return input; }; }) 

那你简单

 <p ng-switch="status|meaning"> <span ng-switch-when="wrong"> Wrong </span> <span ng-switch-default> Correct </span> </p> 

虽然在你的情况下,你可能只是想打印一条消息,所以你可以从字典中拉出消息…

就像是:

 <span ng-if="status"> {{getStatusMessage(status)}} </span> 

这不能用angular的base指令来实现,但是如果你喜欢的话,你可以编写你自己的指令来实现这个指令,并且可以和现有的ngSwitch指令进行接口。

ngSwitchController有一个属性的cases是一个地图。 每个键的前缀都是一个! 和默认情况下是相等的? 。 每个case值是一个具有两个属性的对象: transcludeelement
警告 :与ngModelController不同,ngSwitchController 不是公开的API,所以可能会改变。

基于最初的ngSwitchWhenDirective,我们可以构造一个多开关的时候,它将与所有现有的ngSwitch,ngSwitchWhen和ngSwitchDefault指令无冲突地工作。

 .directive('multiswitchWhen', function () { return { transclude: 'element', priority: 800, require: '^ngSwitch', link: function(scope, element, attrs, ctrl, $transclude) { var selectTransclude = { transclude: $transclude, element: element }; angular.forEach(attrs.multiswitchWhen.split('|'), function(switchWhen) { ctrl.cases['!' + switchWhen] = (ctrl.cases['!' + switchWhen] || []); ctrl.cases['!' + switchWhen].push(selectTransclude); }); } } }); 

示例plunker: http ://plnkr.co/edit/K9znnnFiVnKAgGccSlrQ?p=preview

您可以添加另一个开关盒。

例:

 <p ng-switch="status"> <span ng-switch-when="wrong"> Wrong </span> <span ng-switch-when="incorrect"> Wrong </span> <span ng-switch-default> Correct </span> </p> 

现场示例: http : //jsfiddle.net/choroshin/Zt2qE/2/