HTML
<table data-ng-table="tableParams" class="table table-bordered table-hover " style="border-collapse:collapse" data-ng-init="host.editSave = false" >
<tr id="newTransaction">
</tr>
<tr data-ng-repeat="host in hosts|filter:search:strict" >
<td class="hostTableCols" data-ng-hide="host.editSave">{{host.hostCd}}</td>
<td class="hostTableCols" data-ng-hide="host.editSave">{{host.hostName}}</td>
</tr>
</table>
Jquery
$('#newTransaction').append(
'<td contenteditable><input type="text" class="editBox" value=""/></td>'+
'<td contenteditable><input type="text" class="editBox" value=""/></td>'+
'<td>'+
'<span>'+
'<button id="createHost" class="btn btn-mini btn-success" data-ng-click="create()"><b>Create</b></button>'+
'</span>'+
'</td>'
);
Eckiges Skript
$scope.create = function() {
alert("Hi");
};
Hier wird die im Controller-Teil von AngularJS aufgerufene Funktion nicht vom ng-click-Ereignis ausgelöst. Das Html wird erfolgreich angehängt, aber der ng-Klick funktioniert nicht. Nennen Sie mir Lösungen, damit es funktioniert
Immer noch keine perfekte Lösung !!! – nur um zu zeigen, wie eine dynamische Kompilierung durchgeführt werden kann
app.controller('AppController', function ($scope, $compile) {
var $el = $('<td contenteditable><input type="text" class="editBox" value=""/></td>' +
'<td contenteditable><input type="text" class="editBox" value=""/></td>' +
'<td>' +
'<span>' +
'<button id="createHost" class="btn btn-mini btn-success" data-ng-click="create()"><b>Create</b></button>' +
'</span>' +
'</td>').appendTo('#newTransaction');
$compile($el)($scope);
$scope.create = function(){
console.log('clicked')
}
})
Demo: Geige
Verwenden Sie den Controller nicht zur Dom-Manipulation – dies muss mit Hilfe von Anweisungen erfolgen

Maxim Schustin
Zu machen ng-click
um zu arbeiten müssen wir kompilieren diese Quelle durch Verwendung $compile
Service. Angular sollte über neu generiertes HTML Bescheid wissen und daher sollte dieses HTML in den Digest-Zyklus aufgenommen werden, um es auszulösen ng-click
und andere Veranstaltungen.
Sehen Geige
“Kompilator” erstellen:
.directive( 'compileData', function ( $compile ) {
return {
scope: true,
link: function ( scope, element, attrs ) {
var elmnt;
attrs.$observe( 'template', function ( myTemplate ) {
if ( angular.isDefined( myTemplate ) ) {
// compile the provided template against the current scope
elmnt = $compile( myTemplate )( scope );
element.html(""); // dummy "clear"
element.append( elmnt );
}
});
}
};
});
danach Dummy erstellen factory
das simuliert deine anhängen:
.factory( 'tempService', function () {
return function () {
return '<td contenteditable><input type="text" class="editBox" value=""/></td>'+
'<td contenteditable><input type="text" class="editBox" value=""/></td>'+
'<td>'+
'<span>'+
'<button id="createHost" class="btn btn-mini btn-success" data-ng-click="create()"><b>Create</b></button>'+
'</span>'+
'</td>';
};
});
Und nennen Sie es schließlich so:
<div compile-data template="{{mainPage}}"></div>
im Controller:
$scope.newTransaction= tempService();
Für Ihr Beispiel sollte so etwas sein:
<table data-ng-table="tableParams" class="table table-bordered table-hover " style="border-collapse:collapse" data-ng-init="host.editSave = false" >
<tr compile-data template="{{newTransaction}}">
</tr>
<tr data-ng-repeat="host in hosts|filter:search:strict" >
<td class="hostTableCols" data-ng-hide="host.editSave">{{host.hostCd}}</td>
<td class="hostTableCols" data-ng-hide="host.editSave">{{host.hostName}}</td>
</tr>
</table>
Übrigens, im Moment können Sie dieselbe Direktive für Ihren Code verwenden und jedes dynamische HTML kompilieren.
Sie können verwenden angular.element(this).scope()
ohne Verwendung von ng-click
und ändern
'<button id="createHost" class="btn btn-mini btn-success" data-ng-click="create()"><b>Create</b></button>'
Zu
'<button id="createHost" class="btn btn-mini btn-success" onclick="angular.element(this).scope().create()"><b>Create</b></button>'
ist gut
Ich musste Cordova dazu bringen, den dynamischen Link in einem neuen Fenster zu öffnen, also bestand meine Lösung darin, den ng-Klick auf das übergeordnete Element zu setzen und auf event.target zu schauen, um zu sehen, worauf geklickt wurde:
<p ng-bind-html="foo.barhtml" ng-click="generalClick($event)"></p>
dann
.controller('FooCtrl', function ($scope) {
var html="<a href="http://www.google.com">google.com</a>";
$scope.foo.barhtml = html.replace(/href/g, 'data-href');
$scope.generalClick = function(event){
// have Cordova open the link in a browser window
window.open(event.target.attributes['data-href'].value, '_system');
}
})

AMRESH PANDEY
Sie müssen hier den $compile-Dienst hinzufügen, der die Winkelanweisungen wie ng-click an Ihren Controller-Bereich bindet. So etwas wie:
var divTemplate="..your div template";
var temp = $compile(divTemplate)($scope);
Dann fügen Sie es an den HTML-Code an:
angular.element(document.getElementById('foo')).append(temp);
Sie können das Ereignis auch wie folgt an das div binden:
var div = angular.element("divID");
div.bind('click', $scope.addPhoto());
.
7849400cookie-checkng-click funktioniert nicht von dynamisch generiertem HTMLyes
Sie müssen die neuen dom-Elemente kompilieren, damit anglejs funktioniert … führen Sie diese Manipulation in einer Direktive/einem Controller durch, in der Sie Zugriff auf den Bereich haben
– Arun P. Johny
9. Oktober 13 um 9:26 Uhr
@ArunPJohny: Ich rufe diese Funktion vom Controller auf. Aber wo soll ich die Compile-Funktion platzieren?? In einer Richtlinie??
– Kiran Kumar
9. Oktober 13 um 9:38 Uhr
Ich kenne das genaue Szenario nicht, aber Sie können etwas Ähnliches mit tun
ng-include
und Vorlagen.– Chandermani
9. Oktober 13 um 9:43 Uhr