Динамический контент, добавленный с событием clickText, не работающим над добавленным контентом
Я только начал работать на AngularJS на этой неделе для нового проекта, и мне нужно быстро подняться на скорость.
Одним из моих требований является динамическое добавление содержимого html, и на этом содержимом может быть событие клика.
Итак, код Angular, который у меня ниже, отображает кнопку, и при нажатии на нее динамически добавляется еще одна кнопка. Нажав на динамически добавленные кнопки, следует добавить еще одну кнопку, но я не могу заставить ng-click работать с динамически добавленными кнопками
<button type="button" id="btn1" ng-click="addButton()">Click Me</button>
Образец рабочего кода здесь
http://plnkr.co/edit/pTq2THCmXqw4MO3uLyi6?p=preview
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.addButton = function() {
alert("button clicked");
var btnhtml = '<button type="button" ng-click="addButton()">Click Me</button>';
angular.element(document.getElementById('foo')).append((btnhtml));
}
});
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>
document.write('<base href="' + document.location + '" />');
</script>
<link rel="stylesheet" href="style.css" />
<script data-require="[email protected]" src="//code.angularjs.org/1.3.0/angular.js" data-semver="1.3.0"></script>
</head>
<body ng-controller="MainCtrl">
<p>Hello {{name}}!</p>
<div id="foo">
<button type="button" id="btn1" ng-click="addButton()">Click Me
</button>
</div>
</body>
</html>
Ответы
Ответ 1
app.controller('MainCtrl', function($scope,$compile) {
var btnhtml = '<button type="button" ng-click="addButton()">Click Me</button>';
var temp = $compile(btnhtml)($scope);
//Let say you have element with id 'foo' in which you want to create a button
angular.element(document.getElementById('foo')).append(temp);
var addButton = function(){
alert('Yes Click working at dynamically added element');
}
});
вам нужно добавить здесь службу $compile
, которая привяжет angular directives
как ng-click
к области вашего контроллера. и не забудьте добавить $compile
зависимость в вашем контроллере, как показано ниже.
вот демонстрация plunker
Ответ 2
Вы также можете привязать событие к своей новой кнопке.
$scope.addButton = function() {
alert("button clicked");
var btnhtml = '<button type="button">Click Me</button>';
var newButt = angular.element(btnhtml);
newButt.bind('click', $scope.addButton);
angular.element(document.getElementById('foo')).append(newButt);
}
Обновлено plunkr.