我正在使用带有 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);
};
但我现在正在努力处理事件处理程序,如果我更改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 会丢失一些 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 也可以在此处使用)。这两种用法之间的唯一区别是:content
和content.html()
。
但我不能使用content
给定的OpenLayers.Popup.FramedCloud
期望静态 html 内容字符串。
有什么想法吗?非常感谢。