Javascript 在angularjs中使用$dirty以便在编辑表单时进行检查
每当我的表单被编辑时,我都会写一些字段来检查它。我读到$dirty应该可以完成这项任务,但我不知道我缺少了什么:Javascript 在angularjs中使用$dirty以便在编辑表单时进行检查,javascript,angularjs,forms,form-editing,Javascript,Angularjs,Forms,Form Editing,每当我的表单被编辑时,我都会写一些字段来检查它。我读到$dirty应该可以完成这项任务,但我不知道我缺少了什么: <!DOCTYPE html> <html lang="en"> <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> <div ng-app="myApp" ng-co
<!DOCTYPE html>
<html lang="en">
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="formCtrl">
<form name = "myForm" novalidate>
First Name:<br>
<input type="text" ng-model="user.firstName"><br>
Last Name:<br>
<input type="text" ng-model="user.lastName">
<br><br>
<button ng-click="reset()">RESET</button>
</form>
<p> is Form dirty? {{isDirty}}<p>
<p>form = {{user }}</p>
<p>master = {{master}}</p>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
$scope.master = {firstName:"John", lastName:"Doe"};
$scope.reset = function() {
$scope.user = angular.copy($scope.master);
};
$scope.reset();
$scope.isDirty = $scope.myForm.$dirty;
});
</script>
</body>
</html>
名字:
姓氏:
重置
表格脏吗?{{isDirty}}
表单={{user}}
master={{master}
var-app=angular.module('myApp',[]);
应用程序控制器('formCtrl',函数($scope){
$scope.master={firstName:“John”,lastName:“Doe”};
$scope.reset=函数(){
$scope.user=angular.copy($scope.master);
};
$scope.reset();
$scope.isDirty=$scope.myForm.$dirty;
});
每当用户修改表单时,我都试图将标志isDirty设置为true。谢谢您的表单字段中缺少了
name
属性,这些属性没有为这些字段启用表单验证。您需要为每个字段添加唯一的名称,以便在myForm
对象中添加这些字段
标记
<form name="myForm" novalidate>
First Name:<br>
<input type="text" name="firstName" ng-model="user.firstName"><br>
Last Name:<br>
<input type="text" name="lastName" ng-model="user.lastName">
<br><br>
<button ng-click="reset()">RESET</button>
</form>
更新
无需维护单独的isDirty
标志(这需要更改单独的isDirty标志以反映myForm.$dirty
标志中的任何更改)。相反,我建议您直接使用$scope.myForm.$dirty
作为标志。因此,使用表达式myForm.$dirty
,该标志将随着表单变脏而更改
我只是按照您的建议进行了修改,添加了名称属性,但不起作用。我一直收到相同的错误:-->TypeError:无法读取Plunkr的UNDEFINEDTANKS的属性“$dirty”,但是,我刚刚尝试了它,只能看到isDirty变量的假值,我希望在用户开始修改表单的某个字段时它变为真,有没有办法做到这一点?@DarkAngeL你的html很简单
表单脏吗?{{myForm.$dirty}}
不需要额外的variable@DarkAngeL很高兴帮助你,,Thanks@PankajParkar这很好,但是我如何使用javascrcipt/angular始终监视Plunkr中myForm.$dirty
的值呢?在您的Plunkr中,我刚刚编辑了这个“$timeout(function(){$scope.isDirty=$scope.myForm.$dirty;alert($scope.isDirty);}”);”但仅在页面第一次加载时有效。当我编辑表单时,什么也得不到。值得注意的是,对表单上文本的编辑和撤消将导致$dirty
为真,即使当前值和以前的值相同。如果要确定是否存在未保存的更改,则应将原始更改与当前更改进行比较。
$timeout(function(){
$scope.isDirty = $scope.myForm.$dirty;
});