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 回答