Was mache ich?Angular 1.4 Parse Inhalt von ng-bind-html
Kurz: Ich habe ein Array von Objekten namens $ scope.myData und eine Zeichenfolge namens $ scope.layout. Was ich machen möchte, ist eine Spanne mit ng-repeat="x in myData"
und auch ng-bind-html="layout"
. Layout hat {{ x.key }}
an mehreren Stellen. Ich möchte, dass es das Layout lädt und dann für jedes Objekt im Array anzeigt, und fülle die Variablen aus.
Genauer gesagt: Ich lade die Daten und das Layout über AJAX (mit jQuery). Ich bin mir nicht sicher, ob das überhaupt wichtig ist, da alles andere gut funktioniert.
Welchen Code habe ich bisher?
Ich schließe angular-sanitize.js ein, um mein HTML in der $scope.layout
Variable zu unanitisieren. Ich fügte auch ngSanitize
zur app=angular.module()
Erklärung hinzu.
Unter den AJAX Sachen, müssen Sie wirklich nur die Sachen innerhalb if(status=='success'){}
lesen, da dieser Teil funktioniert.
<script type="text/javascript">
$(document).ready(function(){
$('a.doit').click(function(e){
e.preventDefault();
$.ajax({
method:'POST',
data:{'ajax':true},
url:'<?=URL('--url to load from--')?>'
}).always(function(data,status){
if(status=='success'){
var getelementby='[ng-app="myApp"]';
window.data=data;
angular.element(document.querySelector(getelementby)).scope().$apply(function($scope){
$scope.layout=window.data.layout;
$scope.myData=window.data.data;
});
}else{
console.log('Error :(');
}
});
});
});
var app=angular.module('myApp',['ngSanitize']);
app.controller('myCtrl',function($scope,$http){$scope.myData={};});
</script>
<a href="#" class="doit btn btn-default">Load</a>
<div ng-app="myApp" ng-controller="myCtrl">
<span ng-repeat="x in myData"><span ng-bind-html="layout"></span></span>
</div>
(ich weiß, dass meine Fehlerprüfung so weit Rohöl)
Was ist zu tun? Es zeigt das Layout die richtige Anzahl von Malen, aber es füllt nicht die {{ x.key }}
Ausdrücke.
Was könnte ich falsch machen? Ich bin gerade dabei, meinen HTML-Code zu entfernen. Funktioniert das nicht gerade? Gibt es einen anderen Weg, es zu tun?
Sie sollten Ajax nicht mit Winkel verwenden jQuery. Versuchen Sie es mit Diensten: https://docs.angularjs.org/guide/services –
Ich denke, Sie tun es nicht die "AngularJS Weg".Mit Angular sollten Sie die jQuery-Nutzung auf ein Minimum reduzieren. Das Beste ist, es nie zu benutzen. Für grundlegende Anwendungen benötigen Sie es überhaupt nicht. (Wenn Sie jQuery benötigen, fügen Sie es in eine Direktive ein.) Sie sollten Ansichten nicht mit Ajax-Anfragen laden, wie Sie es versucht haben. Sie sollten dafür einen Router verwenden. Bitte werfen Sie einen Blick auf die Dokumentation von [angular-ui-router] (https://github.com/angular-ui/ui-router). – AWolf
Ich war mit jQuery Ajax, weil ich jQuery's click() -Funktion verwende, und ich bin nicht sicher, wie man $ http, wenn innerhalb einer Funktion –