我收到了有线错误
我有指令日期选择器
我在日期变更时观看了听众
$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;
中打开年份模式而不是写入选择年份
在自由文本中输入日期和月份的错误更改为空
答案 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');
}
}
});
};