Ответ 1
Это "намеренно", так как это продукт того, как angular обрабатывает ng-repeat. По сути, клонируются множественные копии разметки (разметка внутри ng-repeat используется в качестве шаблона) и скомпилированы отдельно для каждого элемента, который вы итерируете. Таким образом, angular в основном компилирует 3 <li ng-switch-when='1' ....>
и 3 <li ng-switch-default ....>
, но делает это вне контекста - нет элемента ng-switch-on для сравнения с.
Это можно увидеть, просмотрев полученную разметку:
<ul ng-switch="" on="toggle">
<!-- ngRepeat: entry in array -->
<!-- ngSwitchWhen: 1 -->
<!-- ngSwitchWhen: 1 -->
<!-- ngSwitchWhen: 1 -->
<!-- ngRepeat: entry in array -->
<!-- ngSwitchDefault: -->
<!-- ngSwitchDefault: -->
<!-- ngSwitchDefault: -->
</ul>
Обе директивы - ng-repeat и ng-switch - должны обрабатываться с осторожностью, поскольку они (в отличие, например, ng-show или ng-hide) сильно влияют на структуру. Второй (рабочий) Plunker - путь для работы - работает только с директивами ПОСЛЕ (структурно, ВНУТРИ) логики ng-switch.