使用,(位与运算符)在Angular ng-if表达式中

Using & (bitwise AND operator) in Angular ng-if expressions

本文关键字:Angular ng-if 表达式 位与 运算符 使用      更新时间:2023-09-26

我无法让&运算符在Angular ng-if表达式中工作(与一些位标志一起使用)。假设我们有这样一些HTML:

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

如果value等于3,那么按位运算应该返回2,因此是一个真值。

然而,Angular每次都会抛出一个Syntax Error异常。是否不允许手术?还是我做错了什么?

连接到活塞。

编辑:我已经通过使用一个简单的函数解决了我的问题:

$scope.checkFlag = function(value, flag){
   return value & flag;
}
但我真的不喜欢这个解决方案。是否有一种方法可以在ng-if中使用它(显然不使用该函数)?

你不能在Angular表达式中使用按位&运算符。根据文档:

Angular表达式与JavaScript表达式类似,但有以下区别:

  • 你不能在Angular表达式中使用Bitwise、,void操作符。

如果你想运行更复杂的JavaScript代码,你应该让它成为一个控制器方法,并从你的视图中调用该方法。

术语注释:& AND操作符;&&逻辑 AND操作符。

UPDATE:您的checkFlag函数可能是最好的解决方法,因为它的名称清楚地表明它的作用(这就是我要使用的),但如果您绝对不想要额外的函数,您可以使用以下等效表达式:

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

一般来说,(value & x) != 0(其中x是2的幂)等价于value % (2 * x) >= x

可以使用按位管道完成此操作:

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
  name: 'hasFlags'
})
export class HasFlagsPipe implements PipeTransform {
  transform(flagsL: number, flagsR: number): boolean {
    return (flagsL & flagsR) != 0;
  }
}

用法:

<div [hidden]="flagsL | hasFlags : flagsR">

注意:我正在使用angular 2+,但是偶然看到了这篇文章,所以希望这篇文章能帮助到其他人。

我不确定你想在这里完成什么,但你正在使用位与运算符。在angular文档中它说:

不能使用Bitwise、逗号和Void操作符:不能在Angular表达式中使用Bitwise、或Void操作符。

AngularJS表达式

问题是你正在使用&而不是&&&是位运算符,Angular不允许在表达式中使用位运算符。

由于没有人提供解决方案,我认为您可以将您的html修改为:

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

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

plunkr见!