私はAngularJSでOpenLayersを使用しています。最終的にポップアップ機能に触れ始めるまで、すべてがうまくいきます。
$compile
次の方法で、サービスを使用して動的コンテンツをポップアップに表示する方法を知っています。
$scope.data = {
text: "Dynamic content"
};
var template = "<div><span>{{data.text}}</span></div>";
$scope.showPopup = function() {
var content = $compile(template)($scope);
var lonlat = "-5694.06868525478, 6708925.0877411375";
$timeout(function() {
var popup = new OpenLayers.Popup.FramedCloud("popup",
OpenLayers.LonLat.fromString(lonlat),
null,
content.html(),
null,
true
);
map.addPopup(popup);
}, 0);
};
しかし、to(入力とスパンの後にtemplate
注意してください)を変更すると、イベントハンドラーに苦労していました:ng-click
var template = "<div><span>{{data.text}}</span><input type='button' ng-click='func()' value='click me'/></div>";
でイベント ハンドラを定義します$scope
。
$scope.func = function() {
console.log("Hello, world");
};
しかし、イベントをトリガーすることはできません。を使用するcontent.html()
と、angularjs が気にするいくつかの重要な情報が失われるとは思えません。次のコードを試したとき:
var template = "<div><span>{{data.text}}</span><input type='button' ng-click='func()' value='click me'/></div>";
var content = $compile(template)($scope);
angular.element("#footer").append(content);
このスニペットは期待どおりに完全に機能します (ここでも ng-click が機能します)。これら 2 つの使用方法の唯一の違いはcontent
、 とcontent.html()
です。
しかし、静的なhtmlコンテンツ文字列が期待さcontent
れているため、使用できません。OpenLayers.Popup.FramedCloud
これについてのアイデアはありますか?どうもありがとうございました。