Angularjs 如何从主控制器将窗体的值设置为pristine?

Angularjs 如何从主控制器将窗体的值设置为pristine?,angularjs,Angularjs,我有这样的情况: <body ng-controller="HomeCtrl"> <div ng-controller="MainCtrl"> <form name="mainForm" > <button type"button" ng-click="mp1()">Make Pristine 1</button> <button type"button" ng-click="mp2()">Mak

我有这样的情况:

<body ng-controller="HomeCtrl">
   <div ng-controller="MainCtrl">
       <form name="mainForm" >
  <button type"button" ng-click="mp1()">Make Pristine 1</button>
  <button type"button" ng-click="mp2()">Make Pristine 2</button>
这在HomeCtrl中不起作用:

app.controller('HomeCtrl', function($scope) {
  $scope.mp1 = function() {
    $scope.mainForm.$setPristine();
  }
});
下面是一个显示问题的plunkr:


我试图做的是让有效性检查和设置原始状态的能力都起作用。我尝试了使用和ngForm的不同组合,将表单设置为外部范围内的对象等,但仍然无法使这两种方法都适用。请注意,我确实需要在HomeCtrl中执行$setPristine,因为存在不同的MainCtrl,我不想多次重新实现代码。

您需要通过将表单对象包装到容器中来解决嵌套范围问题:

<form name="cont.mainForm">
然后使用与控制器中类似的主窗体:

$scope.cont.mainForm.$setPristine();

这里有一个更新的plunk供您使用:

请看这里:你好,Matt,我意识到问题出在作用域上,但是我能够通过在外部控制器中声明var xxform={}来解决有效性检查的问题,但是我无法让它与$setPristine一起工作。这是我的大问题。非常感谢你的帮助。我确实读过这些链接,但我不知道我可以这么做:name=“cont.mainForm”我想它只需要一个简单的名称。我现在会在我的申请表中检查这个。
$scope.cont = {};
$scope.cont.mainForm.$setPristine();