6

Ho un'espressione fondamentale ng-spettacolo come segue:Bitwise Espressione angolare non funziona

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

Tuttavia, questo non riesce con il seguente errore: "Token '&' è inaspettato, aspettandosi [)] nella colonna 18 dell'espressione ".

L'angolare supporta operazioni bit a bit oppure è necessario scrivere una funzione per valutare qualcosa di così semplice?

risposta

5

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

http://docs.angularjs.org/guide/expression "Espressioni angolare rispetto allo JS Espressioni si potrebbe essere tentati di pensare a Vista angolare espressioni come espressioni JavaScript, ma questo non è del tutto corretto, dal momento angolare non lo fa usa un JavaScript eval() per valutare le espressioni. "

È possibile utilizzare un filtro per ottenere l'effetto in quanto tale:

angular.module('project', []) 
.filter('bitwiseAnd', function() { 
    return function (firstNumber, secondNumber) { 
     return ((parseInt(firstNumber, 10) & parseInt(secondNumber, 10)) === parseInt(secondNumber, 10)); 
    // return firstNumber % secondNumber > 0 
    }; 
}); 
+0

ho scritto un piccolo modulo per operazione bit a bit. Controllare [filtro bitmap angolare] [1] [1]: https://github.com/lborgav/angular-bitwise-filter – lborgav

+0

Questo non funziona se il secondo numero è maggiore del primo. Ad esempio "1 & 9" dovrebbe anche essere uguale a true. Dovrebbe essere invece "return ((parseInt (firstNumber, 10) & parseInt (secondNumber, 10))> 0)" – garethb

1

Non supporta secondo il doc.

pensano che citata '|' sul documento, ma non confondetevi, '|' non è bit a bit OR è Angularjs di filter.

0

è possibile utilizzare * /% con numeri primi invece di | &^con punte

sto ussing questo expresions:

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

Con i numeri primi 2, 3 e 5

è necessario iniziare con $scope.filter=1