【问题标题】:Format date input in view Angular JS在视图Angular JS中格式化日期输入
【发布时间】:2015-12-11 11:18:58
【问题描述】:

我有一个动态表单,可以从数组中接收数据并对其进行迭代。如果是日期字段,我想以这种格式发送到控制器“dd/MM/yyyy”或“dd/MM/yyy hh:mm”尝试使用ng-bind,但控制器以其他格式接收“2015 年 12 月 23 日星期三 00:00:00 GMT-0100(本地标准时间)”,这应该是在服务中通过 $http.post 发送的格式。

这是我的字段输入

仅日期:

 <div class="form-field">
                    <label>{{fa.title}}</label>
                    <p class="input-group">
                        <input type="date" class="form-control" 
                               ng-model="sendForm[fa.name]"
                               placeholder="dd/MM/yyyy"
                               ng-bind="sendForm[fa.name] | date:'dd/MM/yyyy'"/>
                    </p>
                </div>

日期和时间:

 <div class="form-field">
                    <label>{{fa.title}}</label>
                    <p class="input-group">
                        <input type="datetime-local" class="form-control" 
                               ng-model="sendForm[fa.name]"
                               placeholder="dd/MM/yyyy hh:mm"
                               ng-bind="sendForm[fa.name] | date:'dd/MM/yyyy hh:mm'"/>
                    </p>
                </div>

controller.js

app.controller("myAppCtrl", ["$scope", "SendForm", "FORMS", function ($scope, SendForm, FORMS) {
   $scope.sendForm = function (form) {
    SendForm.sendInfo(form,
        function onSuccess() {
            $scope.success = true;
        },
        function onError(message) {
            $scope.error = true; 
        },
        function onFinally() {
            $scope.clearForm(form);
        })
}]);

service.js

app.factory("SendForm", ["$http", "CONFIG", "FORMS","$httpParamSerializer", function ($http, CONFIG, FORMS,$httpParamSerializer) {
return {
    sendInfo: function (form, onSuccess, onError, onFinally, message) {
        var data = {
            absolute: CONFIG.absolute
        };

        for (var i = 0, length = FORMS.form_variables.length; i < length; i++) {
            if (angular.isUndefined(form[FORMS.form_variables[i].name])) {
                var key = FORMS.form_variables[i].name;
                var value = "";
                data[key] = value;
            } else {
                var key = FORMS.form_variables[i].name;
                var value = form[FORMS.form_variables[i].name];
                data[key] = value;
            }
        }
        var config = {
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        };

        $http.post(CONFIG.urlSendForm, $httpParamSerializer(data), config).success(function () {
            onSuccess();
            onFinally();

 }
}]);

【问题讨论】:

    标签: javascript html angularjs date datetime


    【解决方案1】:

    您使用的“日期”只是 UI 中用于以正确格式返回/显示日期的 Angualr 过滤器。它不会改变实际值(只是返回格式化的值)。

    如果您想在控制器中获取日期为'dd/MM/yyyy hh:mm',请按如下方式使用 -

    angular.module('myModule')
           .controller('myController', ['$filter',  '$scope', function($filter, $scope) {
    
           var formattedDate = $filter('date')($scope.sendForm[fa.name], 'dd/MM/yyyy hh:mm');
    
    
    }]);
    

    【讨论】:

    • 在通过 $post 发送之前在我的服务中进行格式化。我现在已将服务和控制器添加到问题中,您能否调整您的答案,因为这种方式不起作用@Rabi
    【解决方案2】:

    您需要在控制器和服务中格式化日期,以便将此格式化的日期发送到服务器?您使用的是哪个角度版本?如果您在服务中识别出值是日期,则可以在工厂中注入 $filter 服务并使用它来格式化日期。

    在你的工厂

    app.factory("SendForm", ["$http", "$filter","CONFIG", "FORMS","$httpParamSerializer", function ($http, $filter,CONFIG, FORMS,$httpParamSerializer) {
    return {
        sendInfo: function (form, onSuccess, onError, onFinally, message) {
            var data = {
                absolute: CONFIG.absolute
            };
             var dateHourRegex = /\d{2}\/\d{2}\/\d{4}\s+\d{2}\:\d{2}/,
                 onlyDateRegex = /\d{2}\/\d{2}\/\d{4}/;
    
    
    
            for (var i = 0, length = FORMS.form_variables.length; i < length; i++) {
                if (angular.isUndefined(form[FORMS.form_variables[i].name])) {
                    var key = FORMS.form_variables[i].name;
                    var value = "";
                    data[key] = value;
                } else {
                    var key = FORMS.form_variables[i].name;
                    var value = form[FORMS.form_variables[i].name];
                    if(onlyDateRegex.test(value)){
                       value = dateHourRegex.test(value) ? $filter('date')(value, 'dd/MM/yyyy hh:mm') 
                                                         : $filter('date')(value, 'dd/MM/yyyy');
                    }
                    data[key] = value;
                }
            }
            var config = {
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            };
    
            $http.post(CONFIG.urlSendForm, $httpParamSerializer(data), config).success(function () {
                onSuccess();
                onFinally();
    
     }
    }]);
    

    【讨论】:

    • 这种方式来识别一个值是否是一个不安全的日期,最好使用正则表达式。
    • 是的,应该以该格式发送到服务器,角度的版本是v1.4.8。需要找到一种以最动态的方式定义字段是否为日期的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多