2016-08-16 5 views
0

私は少し十字でアイコンを表示する指示があります。ユーザーがこの十字をクリックすると、コールバックが呼び出されます。ディレクティブのAngularJS - ディレクティブコールバックへの代入

<div class="item" title="{{name}}"> 
    <button type="button" class="close"> 
    <span ng-click="onDelete()">&times;</span> 
    </button> 
    <span class="glyphicon glyphicon-folder-open"></span> 
</div> 

Javascriptを:ここで

は、ディレクティブのテンプレートのコードです

angular.module('hiStack').directive('hsItem', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    templateUrl: 'item.tpl.html', 
    scope: { 
     onDelete: '&', 
     title: '@' 
    } 
    }; 
}); 

最後に、ディレクティブを使用するコード:

<hs-item on-delete="deleteGroupModal = true" title="TestTitle"></hs-item> 

deleteGroupModal = trueがされ私が十字架をクリックすると決して呼び出されません。代わりにdeleteGroup()のような関数を渡すと、機能します。 普通はng-clickと同じように割り当てを渡すことはできますか?

ありがとうございます。

+1

あなたが定義するする関数を作成し、合格する必要があります。deleteGroupModal =真、それが動作するはずです。関数を宣言することはできません。 &が使用されています。 –

+0

'ng-click =" test = true "'のような 'ng-click'ディレクティブのようにすることはできませんか? – Mathieu

+0

"like ng-model directive"とはどういう意味ですか? ng-modelでは、条件なしでのみvariable($ scope)を渡すことができます。 –

答えて

1

イゴール・ヤンコビッチ(IgorJanković)氏によると、属性に直接書くよりも関数を渡す方が良いです。

前記、それはこのような属性に渡された式をevalに可能です:

angular.module('hiStack').directive('hsItem', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    templateUrl: 'item.tpl.html', 
    scope: { 
     title: '@' 
    }, 
    link: function(scope, element, attrs) { 
     scope.onDelete = function() { 
      // Eval the code on the parent scope because directive's scope is isolated in this case 
      if (attrs.onDelete) scope.$parent.$eval(attrs.onDelete); 
     } 
    } 
    }; 
}); 
関連する問題