6

他の誰かがこれを観察したことを願っています:-

AngularJS 1.0 を使用し、要素で type="date" を使用して、Chrome の優れたデフォルトの日時ピッカーを取得します。Chromeが最近[24.0.1312.52]に更新されるまで、すべてが正常に機能していました。日時ピッカーを使用して日付を変更すると、AngularJS データ バインディングはそれを保存して $scope の json プロパティをバインドしません。

キーボードのキーを押して日付を変更すると、データバインディングは日付をプロパティバインドに保存します。

この問題の原因は何ですか?

4

3 に答える 3

2

angularJS google グループで助けてもらいました:-

https://groups.google.com/forum/?fromgroups=#!topic/angular/ycYzD3xRKS8

JSFedle by ピーター・ベーコン・ダーウィン

http://jsfiddle.net/ZsRxj/

var module = angular.module('demoApp',[]);

module.directive('input', function () {
  return {
    require: '?ngModel',
    restrict: 'E',
    link: function (scope, element, attrs, ngModel) {
      if ( attrs.type="date" && ngModel ) {
        element.bind('change', function () {
          scope.$apply(function() {
            ngModel.$setViewValue(element.val());
          });
        });
      }
    }
  };
});
于 2013-02-05T05:40:40.857 に答える
0

inputピッカーで日付を選択すると、Chrome が起動しないようです。短期的なハックは、change(Chrome起動する)イベントを に転送することinputです。幸いなことに、AngularJS はリスナーでイベント自体を使用しないため、イベント値のマッピングなどについて心配する必要はありません。

$('body').on('change', 'input[type="date"]', null, function(){
  $(this).trigger('input');
});

より良い解決策は、Chrome が起動しない理由を突き止めることinputです。

警告: AngularJS コードのどこにもchange発火の原因となる (それによって無限ループが開始される) ようには見えず、大雑把なテストで上記の動作が暗示されましたが、「より良い解決策」の方がはるかに優れた解決策になります。

于 2013-01-25T01:29:58.370 に答える