Javascript 为什么一个对象的角度是未定义的?

Javascript 为什么一个对象的角度是未定义的?,javascript,angularjs,validation,object,undefined,Javascript,Angularjs,Validation,Object,Undefined,我是个新手。这是我正在使用的控制器 svs.controller('registrationCtrl', function($scope, validatorService) { $scope.$watch("registrationForm.email.value", function(newValue, oldValue) { if (validatorService.validateEmail(newValue)) { $scope.registrationFor

我是个新手。这是我正在使用的控制器

svs.controller('registrationCtrl', function($scope, validatorService) {
  $scope.$watch("registrationForm.email.value", function(newValue, oldValue) {
    if (validatorService.validateEmail(newValue))  {
      $scope.registrationForm.email.valid = true;
    } else {
      $scope.registrationForm.email.valid = false;
    }
  });
});
在关联视图中,有一个用户电子邮件的文本输入。它被设置为使用
$scope.registrationForm.email.value
作为模型。似乎就是这样,好像我从
$watch
函数中删除了所有内容,只需做一个简单的控制台日志,每当我更改文本输入的值时,它都会记录

这里的想法是在
$scope.registrationForm
中有一个类似于以下内容的对象

{
  email: {
    value: "someEmail@emailProvider.com",
    valid: true
  }
}
我正在尝试查看文本区域的值,使用服务方法验证电子邮件,并将
registrationForm.email的
valid
属性设置为
true
,当该属性有效时

不幸的是,我得到了一个错误

TypeError:无法读取未定义的属性“email”

我没有在JavaScript
registrationForm.email.valid中明确定义,也没有在视图的HTML中引用它


设置此属性之前是否需要创建它?这是怎么回事?

你不必这样做,因为。。。我已经成功了。 您需要做的就是将属性名添加到表单和输入中

    <script>
  angular.module('emailExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
      $scope.email = {
        text: 'me@example.com'
      };
    }]);
</script>
  <form name="myForm" ng-controller="ExampleController">
    <label>Email:
      <input type="email" name="input" ng-model="email.text" required>
    </label>
    <div role="alert">
      <span class="error" ng-show="myForm.input.$error.required">
        Required!</span>
      <span class="error" ng-show="myForm.input.$error.email">
        Not valid email!</span>
    </div>
    <tt>text = {{email.text}}</tt><br/>
    <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
    <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
    <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
    <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
    <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
  </form>

angular.module('emailExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.email={
正文:'me@example.com'
};
}]);
电邮:
必修的!
无效电子邮件!
text={{email.text}}
myForm.input.$valid={{myForm.input.$valid}}
myForm.input.$error={{{myForm.input.$error}}
myForm.$valid={{myForm.$valid}}}
myForm.$error.required={{{!!myForm.$error.required}}}
myForm.$error.email={{{!!myForm.$error.email}}}

更多详细信息可用

您不必这样做,因为。。。我已经成功了。 您需要做的就是将属性名添加到表单和输入中

    <script>
  angular.module('emailExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
      $scope.email = {
        text: 'me@example.com'
      };
    }]);
</script>
  <form name="myForm" ng-controller="ExampleController">
    <label>Email:
      <input type="email" name="input" ng-model="email.text" required>
    </label>
    <div role="alert">
      <span class="error" ng-show="myForm.input.$error.required">
        Required!</span>
      <span class="error" ng-show="myForm.input.$error.email">
        Not valid email!</span>
    </div>
    <tt>text = {{email.text}}</tt><br/>
    <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
    <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
    <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
    <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
    <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
  </form>

angular.module('emailExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.email={
正文:'me@example.com'
};
}]);
电邮:
必修的!
无效电子邮件!
text={{email.text}}
myForm.input.$valid={{myForm.input.$valid}}
myForm.input.$error={{{myForm.input.$error}}
myForm.$valid={{myForm.$valid}}}
myForm.$error.required={{{!!myForm.$error.required}}}
myForm.$error.email={{{!!myForm.$error.email}}}

更多详细信息可用

是的,设置前必须创建属性

$scope.email={};

是,设置前必须创建属性

$scope.email={};

你是对的。我最后做的是创建一个服务,它有一个创建表单对象的方法。谢谢,你说得对。我最后做的是创建一个服务,它有一个创建表单对象的方法。谢谢