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