如何从控制器访问指令中的表单?

时间:2014-12-03 01:43:02

标签: angularjs

我有一个Angular指令,其中包含一个带验证的表单。我希望在我的视图中有一个按钮,当该指令的形式为$pristine时,该按钮被禁用,但按钮存在于控制器级别的视图中,因此我无法访问指令中的子窗体。

如何从父控制器访问指令内的表单而不做一些奇怪的黑客攻击?

2 个答案:

答案 0 :(得分:0)

为什么不添加按钮ng-disabled

小提琴:http://jsfiddle.net/4vhsmdcn/

<div ng-controller="MyCtrl">
  <form name="bob">
      <input name="some" type="text" ng-model="pie"/>
      <button ng-disabled="bob.$pristine">Submit</button>
    </form>

</div>

答案 1 :(得分:0)

这是一个很好的方法。通过在当前作用域上公开FormController对象来公开指令控制器,就像表单一样。由于您的指令创建了隔离范围,因此代码如下所示:

controller:function($scope, $element, $attrs) {
   $scope.$parent[$attrs.myDirectiveName]=this;   // Exposes the directive controller on the parent scope with name myDirectiveName

   // Now you can define a function that tells state of the form. Or expose the form on the controller
   this.isPristine=function() {
       return $scope.formName.$pristine;
   }
}

指令控制器存在后,将指令附加到html元素,控制器在当前作用域中可用。

<div my-directive='mydir'></div> // create a property $scope.mydir on current scope.

现在,您可以使用$scope.mydir.isPristine()

检查状态