Il y a plusieurs questions comme celle-ci dans stackoverflow. Je connais. J'ai essayé toutes les réponses, mais toujours pas de chance. Mon html:
<div class="headline" id="headline-game">
{{gameContent.headline}}
</div>
jQuery:
var country = $("#headline-game").scope().headline;
alert(country);
Mais je me suis indéfini, au lieu de ma portée. Quelqu'un peut-il m'aider? Je ne veux pas changer la portée, mais y accéder.
Angular ajoute une variable globale angular
à votre fenêtre.
Donc, vous pouvez faire quelque chose comme ça:
angular.element("#headline-game").scope().gameContent.headline;
Le problème est dû à l'ordre dans lequel les plugins sont initialisés.
Donc, accéder à scope()
dans un script jQuery lors du chargement du document aura pour résultat un indéfini, car jQuery est exécuté before Angular.
La solution à ce problème consiste à laisser AngularJS exécuter jQuery une fois prêt, à l’aide de directives .
Exemple :
app.directive("myDirective", function() {
return {
restrict: "A",
scope: {
customheadline: "@"
},
link: function(scope, elem, attrs) {
var country = scope.customheadline;
alert(country);
}
}
});
<div class="headline" id="headline-game" my-directive customheadline="{{ gameContent.headline }}">
{{gameContent.headline}}
</div>
Essaye ça
var country = $("#headline-game").scope().gameContent.headline;
alert(country);
Supposons que la valeur du modèle renvoie une demande $ http.
Dans le contrôleur, vous avez 3 fonctions:
function getGameContentSuccessCallback(){
doSuccessCallback();
}
function getGameContentErrorCallback(){
doSth()
}
function getGameContent(){
GameContentService.GetGameContent(submitData,getGameContentSuccessCallback,getGameContentErrorCallback)
}
alors vous définissez doSuccessCallback dans jQuery
var doSuccessCallback = function(){
var country = angular.element("#headline-game").scope().gameContent.headline;
alert(country );
}