【问题标题】:Angular Material DatePicker date.toLocaleDateString is not a functionAngular Material DatePicker date.toLocaleDateString 不是函数
【发布时间】:2015-09-09 01:50:35
【问题描述】:

我正在尝试使用 angular-material 日期选择器并收到以下错误:

TypeError: date.toLocaleDateString is not a function
at Object.defaultFormatDate [as formatDate] (angular-material.js:6860)
at DatePickerCtrl.configureNgModel.ngModelCtrl.$render (angular-material.js:7184)
at Object.<anonymous> (angular.js:25233)
at m.a.$get.m.$digest (angular.js:15707)
at m.a.$get.m.$apply (angular.js:15986)
at g (angular.js:10511)
at L (angular.js:10683)
at XMLHttpRequest.A.onload (angular.js:10624)

我从这里的代码笔中获取了示例: https://material.angularjs.org/latest/#/demo/material.components.input

相关的HTML代码:

            <div layout="" layout-sm="column">
            <md-input-container style="width:70%">
                <label>Company (Disabled)</label>
                <input ng-model="user.company" disabled="">
            </md-input-container>

            <md-datepicker ng-model="date" md-placeholder="Enter date"></md-datepicker>
        </div>

我的控制器

$scope.date={};
$scope.$watch('date', function () {
    console.log($scope.date);
});

【问题讨论】:

    标签: angularjs angular-material


    【解决方案1】:

    toLocaleDateString 是日期对象的本机方法,因此您的 md-datepicker 似乎没有绑定到日期。如果没有 HTML 和填充数据的代码,很难确定,但这是最可能的原因。

    【讨论】:

    • 你是对的。我没有在我的控制器和范围内将日期选择器的 ng-model 设置为有效的 javascript 日期。谢谢你!!!我将为此编辑我的问题,以便对其他人更有意义。
    【解决方案2】:

    很可能您的date 对象不是Date 类型,请确保它仅属于该类型,而不是string 或其他类型。

    这就是我遇到这个问题的原因,以及我如何解决它。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我遇到了这个错误,因为我正在尝试将格式字符串值分配给与 md-datepicker 绑定的模型,该模型具有 javascript 日期类型 像这样

      $scope.eventdate = $filter('date')($scope.eventdate, 'yyyy-MM-dd');
      

      解决方案是为 md-datepicker 声明新模型并像这样获取它的值

      关于js

      $scope.eventdate = $filter('date')($scope.mddate, 'yyyy-MM-dd');
      

      在 html 上

       <md-datepicker ng-model="mddate" md-placeholder="Enter date" required></md-datepicker>
      

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        我遇到了完全相同的问题,但上面的答案没有帮助。

        使用 new Date() 初始化日期选择器是可行的,但是当尝试使用从服务器返回的值进行初始化时,我得到了上面的错误——尽管它们看起来是相同的格式。

        最后我必须显式创建一个 Date 对象,然后使用 Parse 设置它的值。

                var date = ctrl.data.fromServer;
                ctrl.data.fromServer= new Date();
                if (date != undefined)
                {
                    ctrl.data.fromServer.setTime(Date.parse(date));
                }
        

        【讨论】:

        • 是的,您的服务器返回文本。您必须将文本显式转换为日期。
        猜你喜欢
        • 2020-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        相关资源
        最近更新 更多