无论如何,我可以从范围访问表单控制器,而不知道用户为表单名称定义了什么。
通常,我们会以这种方式访问表单控制器:
$form['register_form']
但是,我正在寻找可以在不知道表单名称的情况下访问表单控制器的方法。示例:
$form[$scope.form_name]
我假设有来自$ scope本身的表单名称或表单控制器的引用。
答案 0 :(得分:5)
您可以使用
访问表单angular.element(el).inheritedData('$formController');
这将获得对元素父表单的引用。
我创建了一个plunker示例here。但是,我不会像在示例中那样在控制器中执行此操作。我将您需要父表格的任何逻辑放入指令中。像这样:
.directive('myDirective', function() {
return {
require: '^form',
restrict: 'A',
controller: ['$scope', function($scope){
$scope.$watch('form', function(val){
// some controller logic
});
}],
link: function(scope, element, attrs, frm) {
scope.form = frm;
// your other logic
}
};
});
答案 1 :(得分:1)
如果表单不在$scope
中,您可以自己将其放在那里。例如,可以使用名为form
的新指令,因为AngularJS允许多个同名指令。
这是一个非常天真的版本:
.directive("form", function () {
function link (scope, el, attr, ctrl) {
scope.forms = scope.forms || [];
if (scope.forms.indexOf(ctrl) === -1) {
scope.forms.push(ctrl);
}
}
return {
restrict: "E",
link: link,
require: "form"
}
})
我做了什么:
form
元素上初始化的新指令。form
指令控制器。scope.forms
收集曝光。