30/09/2018, 23:37

Angular input date wrong và làm sao custom lại

Mình có đọc ví dụ angular input date tại link https://docs.angularjs.org/api/ng/input/input%5Bdate%5D

có một vấn đề là nó view in format yyyy-MM-dd, và cũng có một cái lỗi là mình gõ ngày lớn hơn 31 cái $valid của nó cũng là true!!!
Tại sao vậy?? và có cách nào custom về format dd/MM/yyyy không?

ACP viết 01:37 ngày 01/10/2018

Bạn phải đưa cái code bạn làm bị lỗi thì mọi người mới có thể tìm cách giúp, nói không vậy thì bó tay

Thuc Nguyen Tan viết 01:52 ngày 01/10/2018

Trong directive có chỗ nào để mình lưu cái giá trị nguyên thủy khi đưa vào không? cái crlt.$modelValue í mà để khi user gõ vào phím esc thì mình phục hồi lại ấy.

hoặc là thêm được biến của mình vào cái list này không?

    {"$viewValue":"04/09/2016","$modelValue":"2016-09-03T17:00:00.000Z","$validators":{},"$asyncValidators":{},"$parsers":[null],"$formatters":[null,null],"$viewChangeListeners":[],"$untouched":true,"$touched":false,"$pristine":true,"$dirty":false,"$valid":true,"$invalid":false,"$error":{},"$name":"ngay2","$options":null}
ACP viết 01:48 ngày 01/10/2018

Lưu giá trị nguyên thủy trong angular thì mình chưa nghe. Bạn có thể làm theo cách này:

  • Thêm 1 cái custom attribute để lưu giá trị date ban đầu: http://stackoverflow.com/questions/22049824/conditionally-adding-data-attribute-in-angular-directive-template
  • Thêm event khi người dùng đang focus vào cái input này mà bấm nút Esc thì render lại giá trị từ cái attribute trên.
Thuc Nguyen Tan viết 01:47 ngày 01/10/2018

ok, lưu trong cus attr. thks

                link: function(scope, elem, attrs, ctrl) {
            ctrl.$parsers.push(parsers);
            ctrl.$formatters.push(formatters);
			var cur;var f=0;
			function parsers(value){
				if(f==0){cur=ctrl.$modelValue;f=1;}else{}
				if(  checkStrDate(value)==1 ){
					ctrl.$setValidity('is_valid', true);
					var parts=value.split("/");
					var day=parseInt (parts[0]);
					var month=parseInt ( parts[1]);
					var year=parseInt ( parts[2] );
					cur.setDate(day);
					cur.setMonth(month-1);
					cur.setYear(year);
					return cur;
				}else{
					ctrl.$setValidity('is_valid', false);
					return null;
				}
			}

mình tạo biến cur lưu nó vào luôn, thấy cũng hiệu quả

Bài liên quan
0