过滤器更换时角度范围监视更改(v1.4.3)

时间:2017-01-20 10:25:05

标签: angularjs

我收到了有线错误

我有指令日期选择器

我在日期变更时观看了听众

 $scope.$watch('model', function (newDate) {
    if (newDate) {
        if ($scope.hideDay) {
            $scope.dateFields.day = 1;
        } else {
            $scope.dateFields.day = new Date(newDate).getUTCDate();
        }

        $scope.dateFields.month = new Date(newDate).getUTCMonth() +1;

        $scope.dateFields.year = new Date(newDate).getUTCFullYear();
    } else {
        if ($scope.hideDay) {
            $scope.dateFields.day = 1;
        } else {
            $scope.dateFields.day = null;
        }
        $scope.dateFields.month = null;
        $scope.dateFields.year = null;
    }
});

我奇怪的问题是我有一个搜索框

<input class="free-txt" ng-model="search.name" placeholder="Free search" />

当我在搜索框中输入时,手表模型无缘无故地改变了。

这个错误的原因是什么?如何解决?

这是完整的演示 https://embed.plnkr.co/yGqE33kZNwGz7NaNDOD5/

  

选择日

     

选择月

     

在自由文本&#34; 78&#34;

中打开年份模式而不是写入      

选择年份

在自由文本中输入日期和月份的错误更改为空

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

默认情况下,角度$watch通过引用监视对象

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope

objectEquality:

Compare for object equality using angular.equals instead of comparing for reference equality.
(default: false)

尝试向true添加参数以观察对象或使用watchcollection并为其提供所需的变量

$scope.$watch('model', function (newDate) {
    ...
},true );

该指令仅在日期有效时更新model

    $scope.checkDate = function () {
        $timeout(function () {
            var date = rsmDateUtils.checkDate($scope.dateFields);
            if (date) {
                // the watch is called what date is valid with a year
                if ($scope.hideDay) {
                    $scope.model = $filter('date')(date, 'yyyy-MM');
                } else {
                    $scope.model = $filter('date')(date, 'yyyy-MM-dd');
                }

            }
        });
    };