angular $ watch空值错误

时间:2016-08-07 14:15:20

标签: angularjs error-handling watch angular-ngmodel

我在控制器中有这个:

     $scope.$watch('infos.location', function(newValue, oldValue) {
        if (newValue.formatted_address == 'Erreur ...') {
            var confirmPopup = $ionicPopup.confirm({
                title: 'Geolocalisation',
                template: 'Voulez-vous activer la géolocalisation ?'
            });
            confirmPopup.then(function(res) {
                if (res) {
                    $cordovaPreferences.show().success(function(value) {
                        //alert("Success: " + value);
                    }).error(function(error) {
                        // alert("Error: " + error);
                    })
                } else {
                    console.log('You are not sure');
                }
            });
        }
    }, true);

观看此输入:

<label  class="item item-input">*
   <ion-google-place placeholder="Veuillez saisir l'adresse du bien"  ng-model="infos.location"  current-location="true"/>
</label>

但是当我打开我的观点时,我有这个错误:

Error: undefined is not an object (evaluating 'newValue.formatted_address')

如何避免此类错误?是否有更好的解决方案来观察这个价值&#39; Erreur ......&#39;并开始调用confirmPopup?谢谢。

2 个答案:

答案 0 :(得分:1)

您的'infos.location'不是对象,可能您尚未对其进行初始化或将其初始化为字符串。

我想了解您如何初始化infos对象或整个控制器。

您可以通过初始化infos来解决此问题。

infos: {
  location: {},
  ...
}

或者,如果 ion-google-place 初始化infos.location,您只需检查infos.location(即函数内的newValue)是否(不是) undefined ,只是忽略(跳过)那种情况。

 $scope.$watch('infos.location', function(newValue, oldValue) {
        if (newValue && newValue.formatted_address == 'Erreur ...') {
            ...
        }
    }, true);

答案 1 :(得分:0)

这就是我弄清楚的方式:

$scope.infos = {
      nom: '',
      tel: '',
      location: {},
      lat: '',
      lng: ''
  };

稍后在我的控制器中:

     $scope.$watch('infos.location', function(newValue, oldValue) {
        if (newValue.formatted_address == 'Erreur ...') {
            var confirmPopup = $ionicPopup.confirm({
                title: 'Geolocalisation',
                template: 'Voulez-vous activer la géolocalisation ?'
            });
            confirmPopup.then(function(res) {
                if (res) {
                    $cordovaPreferences.show().success(function(value) {
                        //alert("Success: " + value);
                    }).error(function(error) {
                        // alert("Error: " + error);
                    })
                } else {
                    console.log('You are not sure');
                }
            });
        }
    }, true);
当我进入我的视图时,

infos.location未初始化。现在它有效。谢谢大家!