3

无效电子邮件输入的模型值始终未定义。我希望能够检查用户是否输入了任何文本(即使它还不是有效的电子邮件地址)。

有关实施的更多详细信息,请查看 plnkr:http ://plnkr.co/edit/qV2eqGFhPvZSZKexDVF2?p=preview

html:

<body ng-controller="MainCtrl">
    <form>
      <div>
        <label for="email">Email address</label>
            <input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
        </div>
    </form>
  </body>

控制器:

    var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.user = {};
  $scope.$watch('user.email', function (val){
      console.log("Watch: "+$scope.user.email);
    });
    $scope.changed = function(){
      console.log("Changed: "+$scope.user.email);
    }
    $scope.keyUp = function(){
      console.log("KeyUp: "+$scope.user.email);
    }
});

干杯。

4

3 回答 3

1

其实是有办法的。您可以使用 $ViewValue。

在表单中添加一个 ng-form

body ng-controller="MainCtrl">
    <form name="myForm" ng-form="myForm">
      <div>
        <label for="email">Email address</label>
            <input ng-keyup="keyUp()" ng-change="changed()" type="email" name="email" id="email" ng-model='user.email'/>
        </div>
    </form>
  </body>

然后在控制器中你应该能够获取值

   var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
$scope.user = {};
    $scope.changed = function(){
      console.log("Changed: "+$scope.myForm.email.$viewValue);
    }
    $scope.keyUp = function(){
      console.log("KeyUp: "+$scope.myForm.email.$viewValue);
    }
});

你可以在这里阅读更多

于 2015-03-05T12:05:07.977 回答
0

是的,它按照设计 ng-change 首先评估表达式(电子邮件或文本),如果它有效,它将调用函数

让我们以文本字段为例。

因此,如果其中有任何内容(任何文本)input[text]将是有效的并触发函数(),但在电子邮件的情况下,它只有在input[email]需要进行一些验证的有效时才有效,然后它将触发事件。

同样适用于 $watch 它将评估应用于它的值,$scope.$watch("user.email")在这种情况下 user.email 只有在input[email]包含有效值时才会设置。

ng-keyup将始终调用键盘事件,因此它将调用function()每个代码。

于 2015-03-05T11:58:05.183 回答
-1

您可以在 keyup 上获取输入元素的值

$scope.keyUp = function(){
   console.log('value: ', event.target.value)
}
于 2015-03-05T11:51:31.920 回答