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