当我们将它写入HTML角度时,为什么Math.floor什么都不返回?

时间:2013-11-25 15:34:58

标签: javascript angularjs

这是我的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

4 个答案:

答案 0 :(得分:18)

在这种情况下,AngularJS <span>{{value}}</span>expression)是<span ng-bind="value"></span>的简写,ng-bind是当前scope的动作。

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

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

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

正确的方法是使用filter

angular.module('myApp',[]).filter('floor', function(){

    return function(n){
        return Math.floor(n);
    };
});

答案 1 :(得分:11)

表达式在$ scope上进行评估。如果你在控制器中执行此操作

$scope.Math=Math;

它会起作用。

答案 2 :(得分:1)

将它放在你的控制器中

<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'];

答案 3 :(得分:0)

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