#inputのオートコンプリート問題
input[type="date"]などに入力する際は専用のオートコンプリートが提供されますが、
端末によってchangeイベントが発火しない場合があります。(検証ではHTL21, SC-06Dで再現)
そうなると、ngModelが更新されず困ったことになります。
例えば、validでないとsubmitが押せないようにしていると、入力したのにボタンが押せないという不具合になります。
<form name="form" novalidate>
<input type="date" name="date" ng-model="user.date" required>
<button ng-click="update(user)" ng-disabled="form.$invalid || isUnchanged(user)">SAVE</button>
</form>
対処
directiveなどで要素とngModelを監視して同期させます。
<form name="form" novalidate>
<input type="date" name="date" ng-model="user.date" required input-date>
<button ng-click="update(user)" ng-disabled="form.$invalid || isUnchanged(user)">SAVE</button>
</form>
app.directive "inputDate", [
"$interval"
($interval) ->
return {
restrict: "A"
require: "ngModel"
link: (scope, element, attrs, ngModel) ->
interval = $interval (->
if ngModel.$viewValue != element.val()
ngModel.$setViewValue element.val()
), 500
# ページ遷移時に$intervalをcancelする
scope.$on '$stateChangeStart', () ->
if angular.isDefined interval
$interval.cancel(interval)
interval = undefined
}
]