Javascript 我们应该继续在AngularJS中使用表单吗?

Javascript 我们应该继续在AngularJS中使用表单吗?,javascript,angularjs,html,Javascript,Angularjs,Html,在使用AngularJS时,我们是否仍应使用元素,因为双向数据绑定为我们提供了对控制器中表单数据的直接控制 我们应该使用表单来尊重HTML结构,还是有其他一些原因让我们继续使用它们?不使用元素的方法有哪些缺点 angular.module('formsOrNot',[]) .controller('ExampleController',['$scope',function$scope){ //范例 $scope.list1=[]; $scope.submit1=函数(){ if($scope.

在使用
AngularJS
时,我们是否仍应使用
元素,因为双向数据绑定为我们提供了对控制器中表单数据的直接控制

我们应该使用表单来尊重
HTML
结构,还是有其他一些原因让我们继续使用它们?不使用
元素的方法有哪些缺点

angular.module('formsOrNot',[])
.controller('ExampleController',['$scope',function$scope){
//范例
$scope.list1=[];
$scope.submit1=函数(){
if($scope.text1){
$scope.list1.push(this.text1);
$scope.text1='';
}
};
//无形式
$scope.list2=[];
$scope.submit2=函数(){
if($scope.text2){
$scope.list2.push(this.text2);
$scope.text2='';
}
};  
}]);
input.ng-invalid-required.ng-dirty,input.ng-invalid-email.ng-dirty{
边框:1px纯红;
}
input.ng-invalid-required.ng-pristine,input.ng-invalid-email.ng-pristine{
边框:1px纯红;
}

形式与否
范例
输入文本并按Enter键:
list1={{list1}
无形式
输入文本并按Enter键:
list2={{list2}

没有表单元素,双向数据绑定可以正常工作,但是如果没有表单元素,您将无法利用Angular内置表单验证的优点,这是一件非常有用的事情。基本上,要启用验证,您必须:

  • 使用具有以下所需属性的表单元素:
    name
    novalidate
  • 所有封闭的输入元素应包含
    名称
    必需属性
    然后Angular会自动创建具有以下属性的对象:$error、$pristine、$dirty等。您可以使用此对象检查表单或输入元素的有效性

    更新

    同样,上面使用的是Angular的另一个特性—CSS验证类。是的,即使没有
    表单
    元素,它们也可以正常工作。当您使用特定的HTML5约束属性(如
    电子邮件
    数字
    必需
    )时,它们会自动生成。可以使用这些类来检测一些错误并向用户创建特定的反馈,但在这种情况下,您将根本无法使用Javascript逻辑。类似的内容将不可用:

    
    以下字段包含错误:

    请输入您的姓名。 请输入您的电子邮件。 你的电子邮件不正确。
    如果不想使用
    表单
    元素,则不必使用它。相反,您可以使用放置在某些
    div
    上的
    ng form
    指令,仍然可以获得与AngularJS操作表单相同的好处。但是,是的,以角度方式处理表单验证比手动方式要容易得多。

    一个方面是您计划如何将数据发送到服务器。例如,您使用的是传统的表单提交还是AJAX

    举个例子:在最近的一个例子中,我们通过AJAX向服务器发送表单数据,并期望页面重定向,重定向URL在AJAX响应中传递,然后我们可以在代码中处理该重定向以激活重定向。然而,由于一些第三方cookie问题,这在IE中不起作用,因此我们需要求助于表单提交,服务器命令页面重定向作为响应

    <form name="myForm" novalidate>
      <input type="text" name="myInputOne" required/>
      <input type="email" name="myInputTwo" required/>
    </form>
    <div ng-show="myForm.$invalid && myForm.$dirty">
      <p>The following fields contain mistakes:</p>
      <span ng-show="myForm.myInputOne.$error.required">
        Please enter your name.
      </span>
      <span ng-show="myForm.myInputTwo.$error.required">
        Please enter your email.
      </span>
      <span ng-show="myForm.myInputTwo.$error.email">
        Your email is incorrect.
      </span>
    </div>