2

入力で使用ui-maskしているため、ユーザーは日付を入力できます。

 <input type="text" ui-mask="19/39/2999" ng-model="inicio">

(1、3、2 は追加のマスクなので、それぞれ 0 から 1、0 から 3、2 から 3 のみを許可します)

問題は、dateFilterコントローラーで使用して入力を初期化することです

 $scope.inicio = dateFilter((new Date), 'MM/dd/yyyy')

入力は、たとえば今日の日付の正しい値を示しています06/13/2013。問題は、入力を に変更する05/13/2013と、$scope.inicioモデルに05132013(書式設定がまったくない) が含まれ、 の$viewValue代わりに を使用する方法がわからない$modelValueことです。実行できますか?

4

1 に答える 1

1

私がしたことは、属性を追加して、viewValue と Value のどちらを使用するかを制御することでした。

スクリプトの変更はまったく問題ありません。約数5行のコードが必要です。

方法は次のとおりです。

  • 上のコードと下のコードの小さなビューを提供することにより、コード追加のコンテキストをできるだけよく示すようにします。

最初に変数を先頭に追加します

return function uiMaskLinkingFunction(scope, iElement, iAttrs, controller){
    var maskProcessed = false, eventsBound = false,
    maskCaretMap, maskPatterns, maskPlaceholder, maskComponents,
    //... Ton of varaibles...

    var useViewValue; // <----- ADD THIS

コードの後半に、Formatter 関数と Parser 関数があります。

      function formatter(fromModelValue){
        /*formatter code*/
      }

      function parser(fromViewValue){
        // parser code...
        if (value === '' && controller.$error.required !== undefined) {
          controller.$setValidity('required', false);
        }
        // ADD useViewValue code START
        if (useViewValue) 
            value = value.length ? maskValue(value) : '';
        // ADD useViewValue code END
        return isValid ? value : undefined;
      }

最後に、オブザーバーを属性値に追加する必要があります。

      iAttrs.$observe('uiMask', initialize);

      // ADD useViewValue code START
      iAttrs.$observe('uiMaskUseViewvalue', function (useVVal) {
          useViewValue = useVVal == 'true';
      });
      // ADD useViewValue code END
      iAttrs.$observe('placeholder', initPlaceholder);

HTMLにも実装する

<input type="text" ui-mask="19/39/2999" ui-mask-use-viewvalue="true" ng-model="inicio">
于 2014-01-29T08:22:50.820 に答える