以下是我的指示:
restrict: 'E',scope: { },templateUrl: 'directives/my.directive.html',link: function(scope) { // Want to be able to access "myForm" here (eg: to setPristine(),etc) scope.bla = {} }
以下是模板中:
<form name="myForm" novalidate> <input name="inputOne" type="text" ng-model="bla.name" required/> </form>
我试过了:
console.log(scope.myForm) // shows undefined
和:
<form name="myForm" novalidate> <div ng-init="bla.newForm = myForm"></div> <input name="inputOne" type="text" ng-model="bla.name" required/> </form> console.log(scope.bla.newForm) // Undefined
请不要告诉我:
require: '^form'
我收到错误:无法获取FormController.这是正确的,因为表单是指令的一部分而不是父模板/范围
真的很感激这里的一些帮助.
解决方法
从表单获取表单控制器的一种非常简单的方法,无论范围如何(或者如果您需要从另一个控制器,服务或指令访问它),都是使用angular.element.
angular.element("[name='myForm']").controller("form");
需要注意的是,表单必须已经加载/编译到DOM中,但是由于您在链接函数中执行此操作,因此它应该已经呈现.如果未定义,请尝试将其包装在$timeout中以使摘要有机会运行.
$timeout(function() { angular.element("[name='myForm']").controller("form"); });
这不是非常“最佳实践”,但如果您已经用尽了其他选择,那就太棒了.