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
的两个选项wrong
和correct
的文字。 我已经尝试(如你所见)使用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
。
您可以将status
filter添加到将相同的值映射到相同的值的状态。
.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值是一个具有两个属性的对象: transclude
和element
。
警告 :与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/