2014-02-27 20 views
2

反正我可以從範圍內訪問表單控制器不知道什麼什麼用戶定義表單名稱。AngularJS得到表單控制器編程

通常情況下,我們將訪問形式控制是這樣的:

$form['register_form'] 

不過,我要尋找的是能夠訪問到表單控件不知道窗體名稱的方式。示例:

$form[$scope.form_name] 

我假設從$ scope本身引用表單名稱或表單控制器。

回答

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

如果形式是不是在$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" 
    } 
}) 

我所做的:

  1. 創建新指令將初始化上form元素。
  2. 必需的原件form指令控制器。
  3. 通過scope.forms收集曝光。

JSBin

+0

您的解決方案不包括angular對嵌套表單的支持。 http://jsbin.com/rahomeve/2/edit –

+0

我沒有聲稱它。對於嵌套表單,您需要ngForm的類似指令。 –