在AngularJs未按预期工作的情况下更改输入日期的格式
Changing the format of an input date with AngularJs not working as expected
好吧,我想显示一个输入日期字段,但格式已更改。
我的意思是,默认格式是:yyyy-MM-dd (2015-11-20)
,但我想要它:(11-20-2015)
。
我用momentjs
找到了一个jsfiddle(没有角度),它的工作方式完全符合我的要求。
使用AngularJs时,我也使用了一个指令,但使用了span字段(并且有效)。但如果我使用输入日期,它就不起作用。
这是html:
<body ng-app="docsTimeDirective">
<div ng-controller="Controller">
Current date is: <span my-current-time="format"></span><hr/>
<input type="date" ng-model="myDate.value" my-current-time="format">
</div>
</body>
和Js:
(function(angular) {
'use strict';
angular.module('docsTimeDirective', [])
.controller('Controller', ['$scope', function($scope) {
$scope.format = 'MM/dd/yyyy';
$scope.myDate = {
value: new Date()
};
}])
.directive('myCurrentTime', ['$interval', 'dateFilter', function($interval, dateFilter) {
function link(scope, element, attrs) {
var format,
timeoutId;
function updateTime() {
element.text(dateFilter(new Date(), format));
console.log(dateFilter(new Date(), format));
}
scope.$watch(attrs.myCurrentTime, function(value) {
format = value;
updateTime();
});
element.on('$destroy', function() {
$interval.cancel(timeoutId);
});
// start the UI update process; save the timeoutId for canceling
timeoutId = $interval(function() {
updateTime(); // update DOM
}, 1000);
}
return {
link: link
};
}]);
})(window.angular);
这是Plunker。一些想法?
这是因为.text()
不会应用于<input />
元素。您将需要.val()
。
你可以做一个非常基本的检查来涵盖这两种情况。请遵守以下(未经测试)。。。
element[0].value !== undefined ? element.val(/*...*/) : element.text(/*...*/)
此外,根据讨论,请记住完全缺乏对type="date"
的跨浏览器支持。也许在这里找到一个现成的日期选择器可能最符合你的利益,也可能解决你的格式限制问题。
好吧,我用两种方法解决了我的问题:
1)利用动量Js
attrs.$set('myCurrentDate', momentFilter(date, format));
然后
.filter('moment', function () {
return function (date, formated) {
moment.locale('es');
var momented = moment(date).format(formated);
return momented;
};
});
查看Plunker
2)使用Javascript本机日期对象
attrs.$set('myCurrentDate', dateFilter(date, format));
查看Plunker
但在这两种情况下,在css的帮助下:
input:before {
position: absolute;
top: 3px; left: 3px;
content: attr(my-current-date);
display: inline-block;
color: black;
}
PS:请注意变量$scope.format在这两种情况下的定义之间的差异。
编辑:
但如果我们不想复杂化,我们可以使用AngularUI的优秀日期选择器。它有很多特点。
这让我找到了解决问题的第三种方法:参见Plunker
相关文章:
- 是否可以在没有外部输入的情况下使函数具有自我意识
- 在不使用PHP的情况下将表单输入值获取到Javascript中
- 如何在不通过模型验证的情况下屏蔽文本输入中输入的字符
- 默认情况下,在ipython笔记本中隐藏输入单元格
- 如何在不更改Javascript页面的情况下访问用户输入的电子邮件
- 如何在没有表单提交、没有js、没有jquery和没有ajax的情况下将输入的文本框值存储到php变量中
- 如何在不更改输入内容的情况下更改输入值
- 如何在不使用任何 html 输入/搜索元素的情况下读取本地客户端文本文件
- 输入文本是't在一种情况下以相同的形式更新与另一种情况相同的角度模型
- html输入获胜't在不按住鼠标左键的情况下进行输入
- 阻止在未填写所有输入的情况下提交订单
- 如何在不隐藏键盘的情况下清除输入搜索?(手机)
- AJAX/JS:是否可以在没有提交按钮和刷新页面的情况下获取输入文本的值
- Angular:如何在没有ng模型的情况下获得输入值
- 在切换情况下未分配输入
- JavaScript 在没有提交按钮的情况下提交,通过键盘输入
- 在这种情况下如何处理数据驱动的输入
- 如何在没有 cookie 的情况下在输入中保存值
- 使用 setTimeout 在不阻止输入的情况下运行大型任务,并使用 Promise 找出任务何时完成
- 有没有一种方法可以在不进行eval的情况下输入Highchart系列数据