为什么当我们把Math.floor写成HTML angular时,它什么也不返回



这是我的HTML:

<div ng-controller = "myCntrl">  
    <pre>floor 1: {{Math.floor( value )  }}</pre>  
    <pre>floor 2: {{value }}</pre>  
    <pre>floor 3: {{value | number : 0 }}</pre>  
    <pre>floor 1 from controller: {{newValue }}</pre>  
</div>

控制器

app.controller('myCntrl', function ($scope) {
    $scope.value = 1233.8435;
    $scope.newValue = Math.floor(1233.8435);    
});

输出:

floor 1: 
floor 2: 1233.8435
floor 3: 1,234
floor 1 from controller: 1233

一般来说,我正在寻找获得1233的正确方法。

我不想调用控制器中的新方法。

为什么Math.floor不返回?

谢谢,

演示Fiddle

在这种情况下,AngularJS <span>{{value}}</span>(表达式)是<span ng-bind="value"></span>的简写,ng-bind作用于当前scope

您当前的作用域是由myCntrl定义的作用域,因此ng-bind="value"被评估为$scope.value

AngularJS无法区分全局Math命名空间和$scope.Math,因此它将其视为任何其他作用域表达式。

我建议不要使用$scope.Math=Math;

正确的方法是使用过滤器:

angular.module('myApp',[]).filter('floor', function(){
    return function(n){
        return Math.floor(n);
    };
});

表达式在$scope上求值。如果你在你的控制器中这样做

$scope.Math=Math;

它会起作用的。

将其放入控制器

<div ng-controller = "myCntrl">  
  <pre>floor 1: {{Mathvalue}}</pre>  
  <pre>floor 2: {{value }}</pre>  
  <pre>floor 3: {{value | number : 0 }}</pre>  
</div>

var app = angular.module('myModule', []);
app.controller('myCntrl', function ($scope) {
  $scope.value = 1233.8435; 
  $scope.Mathvalue = Math.floor(1233.8435);
});
app.$inject = ['$scope'];

Angular表达式不支持所有javascript方法,例如Math.floor(),您可以在$scope上删除floor函数并删除Meth-floor

最新更新