当我通过$scope.$watch
观察Angular中的范围变量时,只有在第一次调用watch函数时才会显示undefined
。
是否可以重写我的代码以避免对undefined
进行不必要的检查?
这是一个最小的例子:
1)jsfiddle
2)HTML:
<div ng-app="MyApp">
<div ng-controller="MyCtrl">Enter some text:
<input type="text" ng-model="text" size="30" />
<p>You entered: {{text}}</p>
<p>Length: {{textLength}}</p>
</div>
</div>
3)Javascript:
angular.module('MyApp', []).controller(
'MyCtrl', function ($scope) {
$scope.textLength = 0;
$scope.$watch('text', function (value) {
if (typeof value !== 'undefined') {
$scope.textLength = value.length;
} else {
$scope.textLength = 'observed value is undefined';
}
});
});
答案 0 :(得分:11)
如果您在视图模型中为已监视的属性设置了默认空值,则表示您不会遇到undefined
值的问题。
在您的情况下,在$scope.textLength
初始化之前或之后添加此内容(请检查此fiddle)。
$scope.text = '';
答案 1 :(得分:3)
避免未定义错误的另一个选项是你可以将函数包装在hasOwnProperty if语句中。
$scope.$watch('text', function (value) {
if($scope.hasOwnProperty('text')) {
if (typeof value !== 'undefined') {
$scope.textLength = value.length;
} else {
$scope.textLength = 'observed value is undefined';
}
});
}
};