当前位置:  开发笔记 > 编程语言 > 正文

如何格式化角度材质datepicker的ng-model字符串

如何解决《如何格式化角度材质datepicker的ng-model字符串》经验,为你挑选了4个好方法。

我有一个mongoose连接到包含集合中的Date对象的数据库.我想使用Angular Material的DatePicker控件查看这些Date对象.Date对象遵循ISO字符串格式.

这是一段代码:


    

我收到以下错误:

ng-modelmd-datepicker必须是一个日期实例.

在研究时,我发现你可以使用过滤器来创建一个Date实例,但这对我不起作用 - >我收到一条错误消息,说明在使用简单过滤器时模型值是不可分配的.过滤器只是根据字符串输入返回一个新的Date对象.

如何在仍然允许ng-model更改的情况下将字符串格式化为Date对象?

编辑:mongoose var的架构Schema = mongoose.Schema;

var Schema = mongoose.Schema;

var modelschema = new Schema({
    name : String,
    licensetype : String,
    activationcount : Number,
    expirationdate: Date,
    key : String
})

这是填充模式的快速路由

app.post('/licenses', function (req, res) {

    console.log(req.body.expirationDate);
    License.create({

        name: req.body.licenseName,
        licensetype: req.body.licenseType,
        activationcount: 0,
        expirationdate: req.body.expirationDate,
        key: "123456"
    }, function (err, license) {

        if (err) {
            res.send(err);
            console.log(err);
        }

        //Send user back to main page
        res.writeHead(301, {
            'Location': '/',
            'Content-Type': 'text/plain'
        });
        res.end();
    }
    )

});

masa.. 16

这是一个例子:

标记:

{{license.expirationdate}}

JavaScript的:

app.controller('MyCtrl', function($scope) {

    $scope.license = {
        expirationdate: '2015-12-15T23:00:00.000Z'
    };

    $scope.dt = new Date($scope.license.expirationdate);

});

小提琴:http://jsfiddle.net/masa671/jm6y12un/

更新:

ng-repeat:

标记:

{{d.license.expirationdate}}

JavaScript的:

app.controller('MyCtrl', function($scope) {
    var i;

    $scope.data = [ 
        { license:
            { expirationdate: '2015-12-15T23:00:00.000Z' }
        },
        { license:
            { expirationdate: '2015-12-20T23:00:00.000Z' }
        },
        { license:
            { expirationdate: '2015-12-25T23:00:00.000Z' }
        }
    ];

    $scope.dataMod = [];
    for (i = 0; i < $scope.data.length; i += 1) {
        $scope.dataMod.push({
            dt: new Date($scope.data[i].license.expirationdate)
        });
    }
});

小提琴:http://jsfiddle.net/masa671/bmqpyu8g/



1> masa..:

这是一个例子:

标记:

{{license.expirationdate}}

JavaScript的:

app.controller('MyCtrl', function($scope) {

    $scope.license = {
        expirationdate: '2015-12-15T23:00:00.000Z'
    };

    $scope.dt = new Date($scope.license.expirationdate);

});

小提琴:http://jsfiddle.net/masa671/jm6y12un/

更新:

ng-repeat:

标记:

{{d.license.expirationdate}}

JavaScript的:

app.controller('MyCtrl', function($scope) {
    var i;

    $scope.data = [ 
        { license:
            { expirationdate: '2015-12-15T23:00:00.000Z' }
        },
        { license:
            { expirationdate: '2015-12-20T23:00:00.000Z' }
        },
        { license:
            { expirationdate: '2015-12-25T23:00:00.000Z' }
        }
    ];

    $scope.dataMod = [];
    for (i = 0; i < $scope.data.length; i += 1) {
        $scope.dataMod.push({
            dt: new Date($scope.data[i].license.expirationdate)
        });
    }
});

小提琴:http://jsfiddle.net/masa671/bmqpyu8g/



2> Jeffrey Patt..:

您可以使用ng-init,自定义过滤器和ng-change,并在标记中完成此操作.

JavaScript的:

app.filter('toDate', function() {
    return function(input) {
        return new Date(input);
    }
})

HTML:



使用这种方法,您不需要使用View逻辑来混淆Controller代码.缺点是Controller中对license.expirationdate的任何编程更改都不会自动反映在View中.



3> Toolkit..:

http://jsfiddle.net/katfby9L/1/

// Configure the $httpProvider by adding our date transformer
app.config(["$httpProvider", function ($httpProvider) {
    $httpProvider.defaults.transformResponse.push(function(responseData){
        convertDateStringsToDates(responseData);
        return responseData;
    });
}]);

var regexIso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;

function convertDateStringsToDates(input) {
    // Ignore things that aren't objects.
    if (typeof input !== "object") return input;

    for (var key in input) {
        if (!input.hasOwnProperty(key)) continue;

        var value = input[key];
        var match;
        // Check for string properties which look like dates.
        // TODO: Improve this regex to better match ISO 8601 date strings.
        if (typeof value === "string" && (match = value.match(regexIso8601))) {
            // Assume that Date.parse can parse ISO 8601 strings, or has been shimmed in older browsers to do so.
            var milliseconds = Date.parse(match[0]);
            if (!isNaN(milliseconds)) {
                input[key] = new Date(milliseconds);
            }
        } else if (typeof value === "object") {
            // Recurse into object
            convertDateStringsToDates(value);
        }
    }
}

这将自动将服务器JSON响应中的所有字符串转换为日期


这太棒了.通过响应数据节省了许多循环的麻烦.

4> mudin..:

我会这样做:

HTML:

{{d.license.expirationdate}}

在你的控制器中

$scope.StrToDate = function (str) {
            return new Date(str);
        }

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有