Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angularjs中使用$dirty以便在编辑表单时进行检查_Javascript_Angularjs_Forms_Form Editing - Fatal编程技术网

Javascript 在angularjs中使用$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

每当我的表单被编辑时,我都会写一些字段来检查它。我读到$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-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;
  });