Misko a donné la bonne réponse (évidemment), mais certains d'entre nous, novices, peuvent avoir besoin d'une explication plus détaillée.
Lorsqu'il s'agit d'appeler du code AngularJS à partir d'applications patrimoniales, considérez le code AngularJS comme une "micro-application" existant dans un conteneur protégé au sein de votre application patrimoniale. Vous ne pouvez pas l'appeler directement (pour une très bonne raison), mais vous pouvez faire des appels à distance par le biais de l'objet $scope.
Pour utiliser l'objet $scope, vous devez obtenir le handle de $scope. Heureusement, c'est très facile à faire.
Vous pouvez utiliser l'id de n'importe quel élément HTML dans votre "micro-app" HTML AngularJS pour obtenir l'identifiant de l'application AngularJS $scope.
Par exemple, disons que nous voulons appeler quelques fonctions dans notre contrôleur AngularJS, comme sayHi() et sayBye(). Dans le HTML AngularJS (vue), nous avons une div avec l'id "MySuperAwesomeApp". Vous pouvez utiliser le code suivant, combiné avec jQuery pour obtenir la poignée de $scope :
var microappscope = angular.element($("#MySuperAwesomeApp")).scope();
Vous pouvez maintenant appeler les fonctions de votre code AngularJS par l'intermédiaire du scope handle :
// we are in legacy code land here...
microappscope.sayHi();
microappscope.sayBye();
Pour rendre les choses plus pratiques, vous pouvez utiliser une fonction pour saisir la poignée de l'oscilloscope à chaque fois que vous souhaitez y accéder :
function microappscope(){
return angular.element($("#MySuperAwesomeApp")).scope();
}
Vos appels ressembleraient alors à ceci :
microappscope().sayHi();
microappscope().sayBye();
Vous pouvez voir un exemple de fonctionnement ici :
http://jsfiddle.net/peterdrinnan/2nPnB/16/
J'ai également montré ceci dans un diaporama pour le groupe AngularJS d'Ottawa (passez simplement aux deux dernières diapositives).
http://www.slideshare.net/peterdrinnan/angular-for-legacyapps