我想知道,为什么将一个简单的变量作为参数传递给过滤器不起作用:
使用Javascript:
var Test = Test || {};
Test.Constants = {};
Test.Constants.DateFormat = 'dd/MM/yyyy hh:mm';
function Main($scope){
$scope.date = new Date();
$scope.format = 'dd/MM/yyyy hh:mm';
$scope.format2 = Test.Constants.DateFormat;
}
HTML:
<div>
{{date}}<br> // "2016-06-13T10:29:49.935Z"
{{date | date: 'dd/MM/yyyy hh:mm'}}<br> // 13/06/2016 02:29
{{date | date: format}}<br> // 13/06/2016 02:29
{{date | date: format2}}<br> // 13/06/2016 02:29
{{date | date: Test.Constants.DateFormat}} // Jun 13, 2016
</div>
为什么最后一个没有格式化?
由于
答案 0 :(得分:2)
Test
未在范围上定义,因此在绑定中不可用。
您可以在此处阅读有关范围与全局变量的一些内容:http://jacopretorius.net/2015/04/working-with-global-variables-in-angularjs.html
这里的关键是Angular如何解释之间的表达式 大括号。你可能希望Angular对它做一个简单的评估 代码,但事实并非如此 - Angular实际上使用JavaScript 在当前的上下文中解析这些类似JavaScript的语法 范围。
答案 1 :(得分:1)
因为您没有向范围公开Test
。
$scope.Test = Test;
会做到这一点。
答案 2 :(得分:1)
如果要在html中访问控制器变量,它应该在$ scope中。您正在访问的测试是一个局部变量。
答案 3 :(得分:1)
测试未在您的范围中定义。您必须将Test绑定到$ scope。
答案 4 :(得分:1)
在范围内定义Test
:
function Main($scope) {
$scope.Test = $scope.Test || {};
$scope.Test.Constants = {};
$scope.Test.Constants.DateFormat = 'MMM d, y';
$scope.date = new Date();
$scope.format = 'dd/MM/yyyy hh:mm';
$scope.format2 = $scope.Test.Constants.DateFormat;
}