AngularJs和HTML5必填字段将字段设置为空

AngularJs和HTML5必填字段将字段设置为空,html,validation,angularjs,Html,Validation,Angularjs,我正在尝试编写一个具有以下功能的小型Angular应用程序: 表单以空开头,带有占位符文本。 用户在所需文本框中输入项目。 角度将项目推送到集合。 将表单输入重置为默认值 我有这样的代码(jsfiddle:): HTML: 我面临的问题是,当$scope.newVoice=''执行时,表单被呈现为无效,我会得到有用的HTML5验证弹出窗口,以鼓励我正确填写表单。显然这不是我想要的行为-Angular的正确方法是什么?要删除HTML5验证(因为它只在兼容浏览器上工作),为什么不在表单中添加nova

我正在尝试编写一个具有以下功能的小型Angular应用程序:

表单以空开头,带有占位符文本。 用户在所需文本框中输入项目。 角度将项目推送到集合。 将表单输入重置为默认值

我有这样的代码(jsfiddle:): HTML:


我面临的问题是,当$scope.newVoice=''执行时,表单被呈现为无效,我会得到有用的HTML5验证弹出窗口,以鼓励我正确填写表单。显然这不是我想要的行为-Angular的正确方法是什么?

要删除HTML5验证(因为它只在兼容浏览器上工作),为什么不在表单中添加
novalidate
属性


由于属性为“required”,因此表单的有效性仍然无效。

Angular的1.1.x分支中的以下pull请求将添加$setPristine方法以允许此情况发生

<div ng-controller="MyCtrl">
    <form name="talkForm">
        <input ng-model="newVoice" placeholder="Say something" required />
        <button ng-click="saySomething()">Say</button>
    </form>

    <ul>
        <li ng-repeat="c in conversation">{{c}}</li>
    </ul>
</div>
function MyCtrl($scope) {
    $scope.conversation =[];
    $scope.saySomething = function(){
        if ($scope.talkForm.$valid){
            //push to list
            $scope.conversation.push($scope.newVoice);
            $scope.newVoice='';
        }
    }
}