2016-03-22 19 views
1

AngularJSを使用してディレクティブを作成しました。このディレクティブは、実行時(動的)コントロールを表示しますが、コントローラからイベントをトリガーしていません。誰でも私を助けることができます。anglejsディレクティブの実行時制御のイベントがトリガーされない

注:指示文でもコンパイルに使用されます。

plnkrのリンクを以下に示します。

module.controller('controllerOne', ['$scope', function ($scope) { 


    $scope.AddClickButton = function() { 
     alert("Button Clicked"); 
    }; 


}]); 

module.directive('directiveOne', ['$compile', function ($compile) { 
    return { 
     restrict: 'E', 

     scope: { 

      data: '=' 
     }, 

     link: function ($scope, $element, $attrs) { 

      var btnhtml = '<button type="button" ng-click="AddClickButton()">Click Me</button>'; 
      var temp = $compile(btnhtml)($scope); 

      $element.append(temp); 

     } 
    }; 
}]); 

HTML

<form name="form1" > 

    <directive-one data="dataOne"></directive-one> 

</form> 

Plunkr

+0

から機能を削除することができ、非常に – Chow

答えて

0

あなたはディレクティブは、単離されたスコープを使用してきたように&(式結合)を使用してディレクティブにAddClickButtonメソッド参照を通過しなければなりません。したがって、親のスコープについては直接的にはわかりません。その後、

マークアップ

<form name="form1" > 

<directive-one data="dataOne" click-action="AddClickButton()"></directive-one> 

そしてclickAction isoaltedという範囲の小道具を使用してディレクティブからそのメソッドを呼び出します。

指令

module.directive('directiveOne', ['$compile', function($compile) { 
    return { 
    restrict: 'E', 

    scope: { 
     data: '=', 
     clickAction: '&' 
    }, 
    link: function($scope, $element, $attrs) { 
     var btnhtml = '<button type="button" ng-click="clickAction()">Click Me</button>'; 
     var temp = $compile(btnhtml)($scope); 
     $element.append(temp); 
    } 
    }; 
}]); 

Forked Plunkr

+0

をありがとう どうもありがとうございました。 – Chow

+0

@Chowは答えを受け入れます。ありがとう:) –

+0

さらに私は質問があります。私はng-clickイベントでhtmlタグを動的に生成しています。だから私はディレクトリ内のすべてのアクション名を言及する必要があります。私のアイデアは、共通のobjとしてのディレクトリを持っていて、コントローラには多くのメソッドがあるので、htmlコンテンツを生成するときにメソッド/関数の名前を記述する必要があります。達成する方法はありますか?例: - 私は3つのボタンと3つのボタンがイベントコールの異なるメソッドをクリックしているので、スコープの中に3つのボタンのアクション名をすべて記述する必要がありますか? – Chow

0

あなたはhttp://plnkr.co/edit/9QCpAQUhOKZ3NtU1rfhY

link: function ($scope, $element, $attrs) { 
     $scope.AddClickButton = function() { 
     alert($scope.text); 
     } 
    } 

このバージョンを使用して、コントローラ

関連する問題