Javascript 为什么Math.floor在我们将其写入HTML时不返回任何内容?
这是我的HTML:Javascript 为什么Math.floor在我们将其写入HTML时不返回任何内容?,javascript,angularjs,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 fr
<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>
输出:
一般来说,我正在寻找获得1233
的正确方法
我不想在控制器中调用新方法
为什么Math.floor
什么也不返回
谢谢
演示表达式在$scope上求值。如果在控制器中执行此操作
$scope.Math=Math代码>
它可以工作。Angular expression不支持所有javascript方法,例如Math.floor(),您可以在$scope上取消一个floor函数的清除,然后删除Meth floor将它放在控制器中
在这种情况下,AngularJS{{value}}
()是
的简写,并且ng bind
作用于当前的范围
您当前的作用域是由myCntrl
定义的,因此ng bind=“value”
评估为$scope.value
AngularJS无法区分全局Math
命名空间和$scope.Math
,因此它将其视为任何其他作用域表达式
我建议不要使用$scope.Math=Math代码>
正确的方法是使用:
什么是$scope.Math.floor
?Math.floor指的是JavaScript,这实际上应该包含在Angular文档中:“表达式不是JavaScripteval
。请查看以下示例…”实际上,它是:“将Angular视图表达式视为JavaScript表达式可能很诱人,但这并不完全正确,因为Angular不使用JavaScript eval()来计算表达式。”()+1。也许你可以跳过包装器函数并返回Math.floor;
+1,因为它是一种有角度的方式。这是一个比公认的答案好得多的答案。
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
<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.module('myApp',[]).filter('floor', function(){
return function(n){
return Math.floor(n);
};
});