У меня есть две директивы, которые отображаются на основе настраиваемой переменной.
Это визуально работало, но во время приемочных испытаний я нашел проблему. Я попытался утверждать, что если <settingElement>
не был нажат (настройка var selected
), ни одна директива не отображается. Тест прошел для <directiveA>
но не прошел для <directiveB>
оставив меня немного смущенным.
Ниже приведен пример кода:
<settingElement ng-click="selected = trueOrFalse()"></settingElement>
<directiveA ng-show="selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
Успех! По крайней мере, любопытно, визуально код работает, поэтому вместо тестирования на isDisplayed
я просто утверждал, что высота и ширина равны 0... не идеальны, но работают.
Вероятно, это связано с выражением запуска с неопределенными значениями
попробуйте с ng-if ="selected" or ng-show="selected==true"
Вероятно, лучшим способом сделать это было бы определение selected
в родительском элементе обоих элементов, например:
<div ng-init="selected = false;">
<settingElement ng-click="selected = true"></settingElement>
<directiveA ng-show="selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
</div>
Другим "более коротким временным решением" будет
<settingElement ng-click="selected = true"></settingElement>
<directiveA ng-show="!!selected"></directiveA>
<directiveB ng-show="!selected"></directiveB>
settingElement
не гарантирует определенного результата, поэтому никаких предположений по этому поводу не может быть сделано.
settingElement
не нажимаетсяselected = undefined
и внутриdirectiveB
B выражение ng-show получает true, потому что в JavaScript!undefined = true