来自$ scope的AngularJS以编程方式获取表单控制器

Ton*_*shi 2 angularjs angularjs-scope

无论如何,我可以从范围访问表单控制器,而不知道用户为表单名称定义了什么.

通常,我们会以这种方式访问​​表单控制器:

$form['register_form']
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找可以在不知道表单名称的情况下访问表单控制器的方法.例:

$form[$scope.form_name]
Run Code Online (Sandbox Code Playgroud)

我假设有来自$ scope本身的表单名称或表单控制器的引用.

Jim*_*ert 5

您可以使用访问表单

angular.element(el).inheritedData('$formController');
Run Code Online (Sandbox Code Playgroud)

这将获得对元素父表单的引用.

我在这里创建了一个plunker示例.但是,我不会像在示例中那样在控制器中执行此操作.我将您需要父表格的任何逻辑放入指令中.像这样的东西:

.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
        }
      };
    });
Run Code Online (Sandbox Code Playgroud)