按位角度表达式不起作用

时间:2013-08-02 20:03:51

标签: angularjs angularjs-scope angular-ui angularjs-ng-repeat

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

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

然而,这失败了以下消息:" Token'&'是意料之外的,期待[)]在表达式#14; 的第18行。

Angular是否支持按位操作,还是我需要编写一个函数来评估那些简单的函数?

4 个答案:

答案 0 :(得分:5)

来自angularjs github buglist:https://github.com/angular/angular.js/issues/2838

http://docs.angularjs.org/guide/expression “角度表达式与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
    };
});

答案 1 :(得分:1)

根据doc不支持。

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

答案 2 :(得分: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

开头

答案 3 :(得分:0)

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

以下是我的解决方法:

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

会变成:

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

适合我的作品!