2016-03-29 21 views
0

私はangularjsサンプルコードスニペットhereを持っています。ng-bind-htmlディレクティブを使用してhtmlタグをバインドできます。どのように私はangularjs ng-clickのようないくつかの他のタグを含めることができ、私のサンプルコードngBindHtmlディレクティブ内のangularjsクリックイベント

<a href="javascript:void(0);" id="myLink" ng-click="myFunct()">Test</a>

ようngBindHtmlディレクティブ内部 idタグなどはここにある。しかし:FYI

var app = angular.module("myApp", ['ngSanitize']); 
app.controller("myCtrl", function($scope) { 
    $scope.myText = "<a href='#' ng-click='someFunction()'>Test</a>"; 

    $scope.someFunction = function(){ 
    alert("Link Clicked"); 
    }; 
}); 

、データをサーバから動的にロードされます側のスクリプトと私はng-repeatの指示内にng-bind-htmlを使用しなければならないと私はのようにng-click="myFunction(x.id)"のようなイベントをクリックするそれぞれのIDを渡す必要があります。

+1

これはハッカーが悪いことだろうあなたのサイト上で信頼されていないのJavaScript/HTMLを実行することができることにつながる可能性があるように思えます。 'ng-include'を介して静的コンテンツ(または私が想定しているサーバの動的コンテンツ)を含めることができます... – mgilson

+0

mglisonは正しいですが、表示されているデータを管理している場合は、データテーブルの顧客セルでテンプレート化しています(前にこれを使用したユースケース)。次に、コードを角をつけてコンパイルする必要があります。私はjsFiddleを見ていきます。 –

答えて

1

@Dr Jonesの提案によれば、$compileディレクティブを使用する必要があります。

ライブサンプルはjsfiddleです。

angular.module('ExampleApp', []) 
 
    .controller('ExampleController', function($scope) { 
 
    $scope.myText = "<button ng-click='someFunction(1)'>{{text}}</button>"; 
 
    $scope.text = "Test"; 
 
    $scope.someFunction = function(val) { 
 
     console.log(val); 
 
    }; 
 
    }) 
 
    .directive('bindHtmlCompile', function($compile) { 
 
    return { 
 
     restrict: "A", 
 
     scope: { 
 
     bindHtmlCompile: "=" 
 
     }, 
 
     link: function(scope, elem) { 
 
     scope.$watch("bindHtmlCompile", function(newVal) { 
 
      elem.html(''); 
 
      var newElem = angular.element(newVal); 
 
      var compileNewElem = $compile(newElem)(scope.$parent); 
 
      elem.append(compileNewElem); 
 
     }); 
 
     } 
 
    }; 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="ExampleApp"> 
 
    <div ng-controller="ExampleController"> 
 
    <h3> 
 
    Write code for test button 
 
    </h3> 
 
    <textarea cols="100" ng-model="myText"></textarea> 
 
    <div bind-html-compile="myText"> 
 

 
    </div> 
 
    </div> 
 
</div>

関連する問題