HTMLコンテンツを動的に読み込むディレクティブを作成した場合、生成されたHTMLからそのディレクティブの関数を呼び出すことはできないようです。私の推測では、コンテンツは指示文で生成された後にリンクされる必要があるということです。私は、動的コンテンツを変更した後に要素をコンパイルしようとしますが、それは役に立ちません。この関数は決して呼び出されません。これを行う方法はありますか? (多くのことを前もってありがとう!)AngularJS - ng-bind-htmlの動的コンテンツでディレクティブ関数を呼び出す方法
以下のコードでは、ディレクティブのテンプレートからdoIt()関数への静的呼び出しがあることがわかります。それは動作します。しかし、動的コンテンツ内から同じ関数への呼び出しは機能しません。
<issue obj="obj" label="Make Dynamic Content"></issue>
ここに私のディレクティブがあります:
(function() {
angular.module('myModule').directive('issue', function ($compile, $sce) {
return {
restrict: 'EA',
scope: {
label: '@',
obj: '='
},
templateUrl: 'components/docs/docs.issue.html',
link: function (scope, element, attrs){
scope.theLabel = attrs.label;
scope.doIt = function() {
alert("DOIT CALLED FROM WITHIN ISSUE");
};
scope.showIssue = function() {
// THIS CALL TO doIt() FAILS -- NEVER GETS CALLED...
var s = '<p>Dynamic content: <br><a href="" ng-click="doIt()">Click Me</a></p>';
scope.obj = {content: $sce.trustAsHtml(s)};
jQuery('#issue-panel').show();
$compile(element)(scope);
};
}
};
});
}).call(this);
そして、ここでは、ディレクティブのHTMLテンプレートです... {{theLabel}}てください「と言うだろう。ここ
は私のディレクティブを呼び出す要素です動的コンテンツ "と呼ばれる。これをクリックすると、obj.content内で動的コンテンツが生成されます。私は生成されたコンテンツの上に示すdoIt()の静的呼び出しを持っています。
<div id="win-container">
<a href="" ng-click="showIssue()">
{{theLabel}}
</a>
<div id="issue-panel">
<div class="topicWin-content">
<!-- THIS CALL TO doIt() WORKS... -->
<p>Static content:<br> <a href="" ng-click="doIt()">Static Click</a></p>
<div ng-bind-html="obj.content"></div>
</div>
</div>
</div>
私はまた、 applyAsync()内のテッドコンテンツ - まだ喜びはありません。 – cud
これは、文字列から動的HTMLを作成する方法についての長い質問の中の別のものです。文字列にHTMLを格納する方法は、角が動作する方法に反し、一般的には必要ありません。実際のテンプレートではなく文字列にHTMLを格納する唯一の理由は、ユーザーが生成したコンテンツのためです。これはまったく異なる種類のコンテンツ管理です。 – Claies
@Claies私の場合、それは必ずしも文字列ではない - データソースはプロセスでも、API結果でも、ファイル内の文字列でも、他の形式でもかまいません...アプリのGUI。角度アプリがコンテンツを取得するものである場合、コンテンツにリンクが必要な場合、そのリンクは角度アプリを呼び出す必要があります。アプリケーションビューでテキストコンテンツを配信すべきではないと言う角度には何か固有のものがありますか? – cud