Я использую OpenLayers с AngularJS, все идет хорошо, пока я не начал касаться всплывающей функциональности в конце концов.Как связать обработчик событий при компиляции HTML-фрагмента динамически в AngularJS
Я знаю, как использовать $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. Когда я попытался следующий код:
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);
этот фрагмент кода работает отлично, как и ожидалось (нг-клик работает и здесь). Единственное различие между этими двумя видами использования: content
и content.html()
.
Но я не могу использовать content
, поскольку OpenLayers.Popup.FramedCloud
ожидает статическую строку содержимого html.
Любые идеи об этом? спасибо.
Возможно, речь идет не о компиляции, а в основном о 'content' и' content.html() '. Как я могу получить содержимое элемента, включая сам элемент. 'content.html()' не работает (он возвращает только содержимое элемента). –