可以使用模型在 Angular JS material 中格式化日期吗?
Format date in Angular JS material using model possible?
你好,我在 Whosebug 上找到了这个
我可以使用这个标记来格式化日期:
.module("myApp", ['ngMaterial'])
.config(function ($mdDateLocaleProvider) {
$mdDateLocaleProvider.formatDate = function (date) {
return date ? moment(date).format('DD/MM/YYYY') : '';
};
})
是否可以使用 属性 而不是静态字符串来格式化日期?像这样:
return date ? moment(date).format($scope.format) : '';
谢谢。
config
在任何控制器之前加载,因此您不能使用 $scope
。
所以你可以使用constant,a.e.:
.constant('Constants', {
DATE_FORMAT: 'DD/MM/YYYY'
});
Because the constants are fixed, they get applied before other provide methods. See $provide.constant().
示例:
.module("myApp", ['ngMaterial'])
.config(function ($mdDateLocaleProvider, Constants) {
$mdDateLocaleProvider.formatDate = function (date) {
return date ? moment(date).format(Constants.DATE_FORMAT) : '';
};
})
通过使用 md-date-locale 属性,可以使用技巧。
html:
<md-datepicker ng-model="myDate" md-date-locale="locale"></md-datepicker>
控制器:
$scope.format = 'L';
$scope.locale = {
formatDate: function(date) {
var m = moment(date);
return m.isValid() ? m.format($scope.format) : '';
}
};
动态格式:
如果你想让它动态化(改变格式=改变日期选择器格式),你需要重建日期选择器,在指令中添加一个 ng-if 是诀窍,然后像这样:
$scope.changeFormat = function() {
$scope.format = 'DD MMMM YYYY';
$scope.hideDate = true;
$timeout(function() {
$scope.hideDate = false;
});
};
html:
<md-datepicker ng-if="!hideDate" ng-model="myDate" md-date-locale="locale"></md-datepicker>
工作 plunker:https://embed.plnkr.co/PvmkEhMOORq6LZTr5lJT/
更新:多个日期选择器和 $http 调用后
使用不同格式呈现的多个日期选择器,通过 $http 调用加载,您可以使用此方法完成此操作,因为每个日期选择器都可以通过 md-date-locale
拥有自己的配置。
例如,您可以通过函数构建语言环境:
function buildLocale(format) {
return {
formatDate: function(date) {
return moment(date).isValid() ? moment(date).format(format) : '';
}
}
}
然后在构建日期选择器时调用 if:
$scope.locales = [];
$http.get('YOUR SERVER API').then(function(data) {
$scope.datas = data.data;
angular.forEach($scope.datas, function(item) {
$scope.locales[item.data] = buildLocale(item.format);
})
//this is to build the datepicker only after all locales are built
$scope.dateLoaded = true;
});
和你的 html:
<div ng-if="dateLoaded"><!-- ng-if="dateLoaded" make it to render only after all locales are built -->
<div ng-repeat="field in datas">
<md-datepicker ng-model="models[data]" md-date-locale="locales[field.id]"></md-datepicker>
</div>
</div>
这是一个工作中的 plunker,展示了这个:https://embed.plnkr.co/fyGIC8UPxOsGs3kKlW9z/
你好,我在 Whosebug 上找到了这个
我可以使用这个标记来格式化日期:
.module("myApp", ['ngMaterial'])
.config(function ($mdDateLocaleProvider) {
$mdDateLocaleProvider.formatDate = function (date) {
return date ? moment(date).format('DD/MM/YYYY') : '';
};
})
是否可以使用 属性 而不是静态字符串来格式化日期?像这样:
return date ? moment(date).format($scope.format) : '';
谢谢。
config
在任何控制器之前加载,因此您不能使用 $scope
。
所以你可以使用constant,a.e.:
.constant('Constants', {
DATE_FORMAT: 'DD/MM/YYYY'
});
Because the constants are fixed, they get applied before other provide methods. See $provide.constant().
示例:
.module("myApp", ['ngMaterial'])
.config(function ($mdDateLocaleProvider, Constants) {
$mdDateLocaleProvider.formatDate = function (date) {
return date ? moment(date).format(Constants.DATE_FORMAT) : '';
};
})
通过使用 md-date-locale 属性,可以使用技巧。
html:
<md-datepicker ng-model="myDate" md-date-locale="locale"></md-datepicker>
控制器:
$scope.format = 'L';
$scope.locale = {
formatDate: function(date) {
var m = moment(date);
return m.isValid() ? m.format($scope.format) : '';
}
};
动态格式:
如果你想让它动态化(改变格式=改变日期选择器格式),你需要重建日期选择器,在指令中添加一个 ng-if 是诀窍,然后像这样:
$scope.changeFormat = function() {
$scope.format = 'DD MMMM YYYY';
$scope.hideDate = true;
$timeout(function() {
$scope.hideDate = false;
});
};
html:
<md-datepicker ng-if="!hideDate" ng-model="myDate" md-date-locale="locale"></md-datepicker>
工作 plunker:https://embed.plnkr.co/PvmkEhMOORq6LZTr5lJT/
更新:多个日期选择器和 $http 调用后
使用不同格式呈现的多个日期选择器,通过 $http 调用加载,您可以使用此方法完成此操作,因为每个日期选择器都可以通过 md-date-locale
拥有自己的配置。
例如,您可以通过函数构建语言环境:
function buildLocale(format) {
return {
formatDate: function(date) {
return moment(date).isValid() ? moment(date).format(format) : '';
}
}
}
然后在构建日期选择器时调用 if:
$scope.locales = [];
$http.get('YOUR SERVER API').then(function(data) {
$scope.datas = data.data;
angular.forEach($scope.datas, function(item) {
$scope.locales[item.data] = buildLocale(item.format);
})
//this is to build the datepicker only after all locales are built
$scope.dateLoaded = true;
});
和你的 html:
<div ng-if="dateLoaded"><!-- ng-if="dateLoaded" make it to render only after all locales are built -->
<div ng-repeat="field in datas">
<md-datepicker ng-model="models[data]" md-date-locale="locales[field.id]"></md-datepicker>
</div>
</div>
这是一个工作中的 plunker,展示了这个:https://embed.plnkr.co/fyGIC8UPxOsGs3kKlW9z/