2017-08-11 10 views
1

に抽出ディレクティブの属性値は、私は制御されませんが、正しく書き込まれることを期待することができパーシャルから含まれているいくつかの既知の入力と少数で構成されてフォームを持っています。簡素化され、それは次のようになります。このようなアンギュラ - ブートストラップ

<form ...> 
    <input name="input1" type="hidden" value="1"> 
    <div class="from_partial" ng-controller="Controller"> 
    <!-- here goes first partial --> 
    <button type="button" ng-click="check()">Check</button> 
    </div> 
    <div class="from_partial" ng-controller="Controller"> 
    <!-- here goes second partial --> 
    <button type="button" ng-click="check()">Check</button> 
    </div> 
</form> 

部分的なルックス:

<div class="item"> 
    <input type="text" ng-model="name"/> 
</div> 
<div class="item"> 
    <input type="text" ng-model="age"/> 
</div> 

今、私は何とか各部分に対して個別に、コントローラのcheck()機能でこれらの入力を使用する必要があります。私は彼らの名前を事前に知らない。それらを列挙する最良の方法は何ですか? Angularがブートストラップしている間に特定のモデルを$scopeで配線している間にそれらを取得できますか?

は、言い換えれば、私は{"name", "age"}を含む例$scope.input_namesため、入力の名前を知っているために、各Controllerオブジェクトをしたいと思います。

+0

フォームに「name」属性がある場合は、すべてのモデルが '$ scope.formName'オブジェクトに含まれています。 –

答えて

0

それは、同じ名前を持つ複数のディレクティブを定義することが可能ですし、これでそれが容易になる判明:

angular.module(app_name) 
.controller("Controller", ['$scope', function ($scope) { 
    $scope.input_names = []; 
    ... 
}]) 
.directive('ngModel', function() { 
    var linker = function(scope, element, attrs) { 
     scope.input_names.push(attrs.ngModel); 
    } 

    return { 
     restrict: 'A', 
     priority: 100, 
     require: '?ngModel', 
     link: linker 
    }; 
}); 

元アンギュラディレクティブは、優先度1で定義されており、最初に実行されます。次に、カスタムディレクティブは、ng-model属性を使用して定義された名前をscope.input_namesに挿入します。これにより、各コントローラは、関連する部分的に定義された名前だけを取得することが保証されます。 ng-modelに関連するものはすべて通常どおり動作します。