我有一个Angular指令,其中包含一个带验证的表单。我希望在我的视图中有一个按钮,当该指令的形式为$pristine
时,该按钮被禁用,但按钮存在于控制器级别的视图中,因此我无法访问指令中的子窗体。
如何从父控制器访问指令内的表单而不做一些奇怪的黑客攻击?
答案 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()