2017-03-16 11 views
0

クリックイベントハンドラを持つ動的に新しいDOM要素を追加しようとしています。DOMエレメントのクリックイベント機能がangularJsアプリケーションで動作しない

HTML

<div ng-app="miniapp" ng-controller="Ctrl"> 
    <div id="div" ng-click="addingEvent()">DIV </div> 
</div> 

はJavaScript

var $scope; 
var app = angular.module('miniapp', []); 

function Ctrl($scope) { 
    $scope.addingEvent = function(){ 
     var myEl = angular.element(document.querySelector('#div')); 
     myEl.append('<a ng-click="afterEvent()" href="#">anchor addedd </br> </a>'); 
    }; 

    $scope.afterEvent = function(){ 
     alert('after event'); 
    }; 

}; 

Here's the demo:ここでは、コードです。ご覧のとおり、アンカーが追加されている間は、クリックイベントは正しく処理されません。それを修正するには?

+0

あなたは、このような操作するための 'NG-if'として角度のディレクティブを使用していますDOM?可能であれば、直接操作しないでください。 – Duncan

+0

いいえ、コントローラー機能を使用しようとしています –

+0

js fiddleで簡単に確認できますrequiremnet –

答えて

1

DOMに要素を追加するだけでは不十分です。Angularにそのことを知らせる必要があります。 (簡潔にするためここでの唯一のコントローラをリスト)一つの可能​​なアプローチ:

function Ctrl($scope, $compile) { 
    var anchorTemplate = '<a ng-click="afterEvent()" href="#">anchor addedd </br> </a>'; 

    $scope.addingEvent = function(){ 
    var myEl = angular.element(document.querySelector('#div')); 
    var $anchor = angular.element(anchorTemplate); 
    $compile($anchor)($scope); 
    myEl.after($anchor); 
    }; 
} 

ここにも適用されるいくつかの良い習慣で、一緒にプレイするthe demoです。しかし、実際には、この機能を指令(Angular 1.5の観点からのコンポーネント)として実装することにしました。

+0

優秀!それは、ありがとうございます。 –

1

したがって、ng-if文を使用してコードを修正しました。古いJS方法を使用してDOM内の要素を削除または追加する必要はありません。

HTML

<div ng-app="miniapp" ng-controller="Ctrl"> 

<div id="div" ng-click="addingEvent()">DIV <span><a ng-click="afterEvent()" href="#" ng-if="showAnchor">anchor addedd </a></span></div> 


</div> 

SCRIPT

var $scope; 
var app = angular.module('miniapp', []); 

function Ctrl($scope) { 

      $scope.showAnchor=false; 
     $scope.addingEvent = function(){ 

      $scope.showAnchor=true; 

    }; 
    $scope.afterEvent = function(){ 
     alert('after event'); 
    }; 

}; 
+0

Niteshさんに時間を与えていただきありがとうございます。私はデモンストレーション目的のみにその例を示しましたが、基本的にAPIレスポンスのベースにアンカーリンクを動的に追加する必要があります。 –

1

Jsfiddle demo updated

myEl.append($compile('<a ng-click="afterEvent()" href="#">anchor addedd </br> </a>')($scope)); 

解決これは動作します

関連する問題