将变量传递给角度过滤器

时间:2016-06-13 11:02:32

标签: javascript angularjs variables filter

我想知道,为什么将一个简单的变量作为参数传递给过滤器不起作用:

使用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>

为什么最后一个没有格式化?

由于

5 个答案:

答案 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;
}

见工作http://jsfiddle.net/da2w2jdL/

相关问题