J'ai ce simple scénario :
Élément d'entrée dont la valeur est modifiée par la méthode val() de jQuery.
J'essaie de mettre à jour le modèle angulaire avec la valeur que jQuery a défini. J'ai essayé d'écrire une directive simple, mais elle ne fait pas ce que je veux.
Voici la directive :
var myApp = angular.module('myApp', []);
myApp.directive('testChange', function() {
return function(scope, element, attrs) {
element.bind('change', function() {
console.log('value changed');
})
}
})
c'est la partie jQuery :
$(function(){
$('button').click(function(){
$('input').val('xxx');
})
})
et html :
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<input test-change ng-model="foo" />
<span>{{foo}}</span>
</div>
</div>
<button>clickme</button>
Voici le violon avec mon essai :
http://jsfiddle.net/U3pVM/743/
Quelqu'un peut-il m'indiquer la bonne direction ?
2 votes
Mélanger AngularJS et jQuery, en dehors des directives, est souvent une mauvaise idée. Est-ce que jQuery est obligatoire pour ce que vous voulez faire ?
0 votes
Pourquoi ne pas définir l'événement de clic avec angular à une fonction dans le contrôleur pour changer la valeur du modèle ?
0 votes
@Blackhole, j'utilise le plugin jquery upload qui fait son travail et met le chemin du fichier téléchargé dans l'entrée cachée. Tout ce dont j'ai besoin est d'avoir accès à ce chemin dans le modèle angulaire. Je me suis donc dit que j'allais le définir comme une valeur de l'entrée cachée et après qu'il ait été modifié, mettre à jour le modèle angulaire.
0 votes
Je ne vois pas d'appel à Jquery dans votre bidule... Pouvez-vous vérifier et indiquer où vous changez la valeur avec JQ ?
0 votes
Votre bricolage renvoie à un exemple d'application Todo, qui n'a rien à voir avec cette question.
0 votes
Désolé, j'ai mis à jour l'adresse du violon.
0 votes
Essayez d'ajouter quelque chose comme ceci dans votre gestionnaire de clics (avec le journal de la console "valeur modifiée") : scope.foo = element.val() ; scope.$apply() ; Ce que vous voulez faire, c'est propager la modification dans votre modèle Angular. Comme cette opération est lancée en dehors d'un callback Angular, l'appel "$apply()" indique à Angular de reconnaître le changement et de mettre à jour ses modèles.