我有这个$watch
,它将过滤器应用于日期格式:
$scope.$watch(function() {
return pn.myObj.birthDate;
},function(n,o){
var dateView = $filter('date')(pn.myObj.birthDate,'yyyy-MM-dd');
pn.myObj.birthDate = dateView;
});
我第一次加载我在控制台中读到的页面:
TypeError:无法读取未定义的属性'birthDate'
当我的对象为$watch
时,如何防止undefined
中出现的问题?
答案 0 :(得分:7)
在调用$ watch函数时,您的对象不能初始化。在尝试访问其中一个属性之前,请检查它是否存在。
$scope.$watch(function() {
return pn && pn.myObj && pn.myObj.birthDate;
}
答案 1 :(得分:2)
确保您正确处理错误,
$scope.$watch(function() {
if(angular.isDefined(pn.myObj) && angular.isDefined(pn.myObj.birthDate)) {
return pn.myObj.birthDate;
}
},function(n,o){
if(n != null) {
var dateView = $filter('date')(n,'yyyy-MM-dd');
pn.myObj.birthDate = dateView;
}
});
您还可以添加回调,
$scope.$watch(function() {
return pn.myObj.birthDate;
},function(n,o){
if(n != o) {
var dateView = $filter('date')(n,'yyyy-MM-dd');
n = dateView;
}
});
这样,您的代码就不会为每次返回值执行。