9

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

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

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

但是,AngularSyntax Error每次都会抛出异常。不允许操作吗?还是我做错了什么?

链接到plunker

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

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

但我真的不喜欢这个解决方案。有没有办法在ng-if(显然不使用函数)中使用它?

4

5 回答 5

13

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

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

  • ...
  • 您不能在 Angular 表达式中使用按位,或运算符。void

如果您想运行更复杂的 JavaScript 代码,您应该将其设为控制器方法并从您的视图中调用该方法。

关于命名的注意事项:&按位与运算符;&&逻辑AND 运算符。

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

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

通常,(value & x) != 0(其中x是 2 的幂)等价于value % (2 * x) >= x

于 2016-09-02T14:40:49.140 回答
2

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

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+,但遇到了这篇文章,所以希望这对其他人有帮助。

于 2021-02-19T11:08:16.693 回答
1

问题是您使用&的是&&. &是位运算符,Angular 不允许在表达式中使用位运算符。

于 2016-09-02T14:37:57.177 回答
1

我不确定您想在这里完成什么,但您使用的是按位 AND 运算符。在角度文档中它说:

无按位、逗号和空运算符:您不能在 Angular 表达式中使用按位、、或空运算符。

AngularJS 表达式

于 2016-09-02T14:40:52.463 回答
1

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

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

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

见plunkr!

于 2016-09-02T14:44:32.450 回答