2016-12-12 5 views
0
.directive('aaValMsgFor', ['aaFormExtensions', 'aaUtils', function (aaFormExtensions, aaUtils) { 
      //generate the validation message for a particular form field here 
      return { 
       require: ['^form'], 
       priority: 1, 
       scope: true, 
       link: function ($scope, element, attrs) { 

        var fullFieldPath = attrs.aaValMsgFor; 
        var fieldInForm, formObj; 

        var innerScope = $scope; 
        while ((!fieldInForm || !formObj) && innerScope) { 
         fieldInForm = innerScope.$eval(fullFieldPath); 
         formObj = innerScope.$eval(fullFieldPath.substring(0, fullFieldPath.indexOf('.'))); 

         if ((!fieldInForm || !formObj)) { 
          innerScope = innerScope.$parent; 
         } 
        } 

innerScope.$eval(fullFieldPath);私はいつも未定義です。

fullFieldPathがmodel.nameであるかどうかを確認する方法はありますか?スコープ内のすべての式をチェックして、わかっているのですか?私が正しい方法でいるかどうか

EDIT:

私もやる前に:要素には名前がある

$compile(element)(scope); 

と:model.name

が、後にinnerScopeの$ evalが動作しませんが...

答えて

2

ますコントローラの引数をディレクティブに指定した場合(リンクの4番目の引数として注入される)、モデルをインクルードするようにリンク関数を変更することができます:

controller: 'SomeController', 
controllerAs: 'vm', 
require: ['^form'], 
link: function($scope, element, attrs, controller) { 
    // Change controller.name here to see if it exists; 
    if (controller.name) { 

    } 
} 
関連する問題