Angular $ watch:TypeError:无法读取未定义

时间:2015-07-27 10:47:10

标签: angularjs

我有这个$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中出现的问题?

2 个答案:

答案 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;
    }
});

这样,您的代码就不会为每次返回值执行。