2017-08-15 11 views
1

動的に生成する要素(ボタン)がある場合、またはinit AngularJSの後に生成する要素がある場合、AngularJSの問題が発生しました。下のソースコードは、ng-click属性をトリガーできないボタンを示しています。 AngularJSを起動した後にAngularJS属性をトリガできるアイデア。ありがとう。initの後にAngularJS属性を持つHtml要素AngularJS

OperationFormatter: function (value, row) { 
    var operations = []; 

    operations.push('<button class="btn-mini glyphicon glyphicon-edit" ng- 
       click="myFunc()" title="Shared_Edit"></button>'); 

    return operations.join(' '); 
// This function only can execute after init the AngularJS due to certain 
conditions. 
} 

$(function() { 
MyCtrl(); 
}) 

function MyCtrl($scope) { 
var app = angular.module("appAffiliateInfo", []); 
app.controller("ctrlBankInfo", function ($scope) { 
    $scope.myFunc = function() { 
     alert('ok'); 
    }; 
}); 
}; 
+0

オペレーションフォーマッタは、角度のあるアプリケーションコード内か外にありますか?それ以外の場合は、まったく正しいアプローチではありません。それが内部にある場合は、$ compileを使用して、domに動的に追加される要素をコンパイルすることができます – Shantanu

答えて

0

生成したHTMLコードをテンプレートに動的に挿入しようとしているとします。 AngularJSはすでに「実行時」にテンプレートを解析し、すべてのウォッチャーを作成しているため、このようにすることはできません。

あなたがそうのように、$compileサービスを使用する必要があります:$で「コンパイル」

// scope: the scope containing the function called by ng-click 
// htmlCode: your html code (as a string) 
var newElem = $compile(htmlCode)(scope); 

// use the proper code here, depending on what you want to achieve with the HTML element 
document.body.appendChild(newElem[0]); 

コンパイル、HTMLコードが必要なウォッチャーを作成するために解析されます。 でなければなりません。正しいスコープを$ compileに指定する必要があります。そうしないと、ng-clickする関数は呼び出されません。

関連する問題