3

Я не могу заставить оператора & работать в выражении Angular ng-if (для использования с некоторыми битовыми флагами). Предположим, у нас есть некоторые HTML, как это:Использование & (побитовый оператор И) в выражениях углового ng-if

<div ng-if="value & 2"> </div> 

Если value равен 3, то операция поразрядного должна возвращать 2 и, таким образом, истинное значение.

Тем не менее, Угловые выбрасывают исключение Syntax Error каждый раз. Не разрешена ли операция? Или я делаю что-то неправильно?

Ссылка на plunker.

Edit: я уже устранить проблему, используя простую функцию, которая делает работу:

$scope.checkFlag = function(value, flag){ 
    return value & flag; 
} 

Но я действительно не нравится это решение. Есть ли способ использовать его в ng-if (без использования функции, очевидно)?

ответ

3

Вы не можете использовать побитовый оператор & в выражении с угловым выражением. Согласно documentation:

Угловые выражения как выражения JavaScript, со следующими отличиями:

  • ...
  • Вы не можете использовать Поразрядные, , или void операторы в угловом выражении.

Если вы хотите запустить более сложный JavaScript-код, вы должны сделать его методом контроллера и вызвать метод из вашего представления.

записку по номенклатуре: & является побитовое И оператор; && - логический И оператор.

UPDATE: Ваша checkFlag функция, вероятно, лучший обходной путь, потому что его имя становится ясно, что он делает (и это то, что я хотел бы использовать), но если вы абсолютно не хочу дополнительную функцию, вы можете использовать следующее эквивалентное выражение:

<div ng-if="value % 4 >= 2"> </div> 

в общем, (value & x) != 0 (где x является степенью 2) эквивалентно value % (2 * x) >= x.

1

Проблема в том, что вы используете & вместо &&. & - побитовый оператор, а угловой не позволяет побитовые операторы в выражениях.

+0

I Предположим, он на самом деле пытается чтобы использовать бит-мудрый оператор, поэтому я не знаю, верно ли ваше первое предложение. Если && как-то имитирует это поведение в угловатом, и я идиот. – KreepN

+0

Да, я пытаюсь использовать * конкретно * побитную операцию. Я хочу использовать побитовое действие для обработки моих битовых флагов. – Luxor001

+0

А, я вижу. Ну, как показали Майкл и Вилиус, Angular не позволяет поразрядным образом выражать свои выражения. – StephenTG

1

Я не уверен, что вы хотите сделать здесь, но вы используете бит-мудрый оператор И.И в угловой документации говорится:

Нет побитовых, запятых и недействительных операторов: вы не можете использовать побитовые или недействительные операторы в выражении с угловым выражением.

AngularJS expression

1

Поскольку никто не предоставил решение я предполагаю, что вы могли бы просто изменить свой HTML, чтобы:

<body ng-controller="MainCtrl"> 
    <div ng-if="check(value,2)">Hey! </div> 
</body> 

с

$scope.check = function(val, providedInt){ 
    return val & providedInt; 
}; 

See plunkr!

Смежные вопросы