7

我有一个基本的 ng-show 表达式如下:

ng-show="((message.status & messageStatus.Spam) != 0)"

但是,这会因以下消息而失败: “Token '&' is unexpected, expecting [)] at column 18 of the expression”

Angular 是否支持按位运算,还是我需要编写一个函数来评估如此简单的事情?

4

4 回答 4

5

来自 angularjs github 错误列表:https ://github.com/angular/angular.js/issues/2838

http://docs.angularjs.org/guide/expression “Angular 表达式与 JS 表达式 可能很容易将 Angular 视图表达式视为 JavaScript 表达式,但这并不完全正确,因为 Angular 不使用 JavaScript eval( ) 来评估表达式。"

您可以使用过滤器来实现这样的效果:

angular.module('project', [])
.filter('bitwiseAnd', function () {
    return function (firstNumber, secondNumber) {
        return ((parseInt(firstNumber, 10) & parseInt(secondNumber, 10)) === parseInt(secondNumber, 10));
    // return firstNumber % secondNumber > 0
    };
});
于 2013-08-02T20:10:16.433 回答
2

根据文档它不支持。

认为它在文档中提到'|'但不要混淆,'|'不是按位OR它是 Angularjs 的filter.

于 2013-08-02T20:13:27.467 回答
0

您可以将 */% 用于素数而不是 |&^ 与位

我正在使用这个表达式:

ng-class="{'active':(filter% 2 )}"
ng-click="filter = filter % 2  ? filter * 2 : filter / 2"  
ng-class="{'light':(filter % 2)}" class="fa fa-eye"

使用素数 2、3 和 5

你必须从$scope.filter=1

于 2013-12-28T13:33:48.367 回答
0

感谢您的发言。已经失去了几个小时,直到我意识到它不起作用:)

这是我的解决方法:

ng-show="((message.status & messageStatus.Spam) != 0)"

会变成这样:

ng-show="(bitwise(message.status, messageStatus.Spam) != 0)"
...
$scope.bitwise = function(n1, n2){
  return n1 & n2;
}

非常适合我!

于 2018-05-01T00:43:00.430 回答