angularjs – transmission de données entre contrôleurs

Je construis une application angular à l’aide de modaux et j’aimerais passer des données entre mes contrôleurs pour alimenter ma vue modale.

Mon contrôleur principal est JobListCtrl et callReportModalData est déclenché lorsque je clique sur le lien censé appeler le modal. J’utilise le service reportJobModalData pour stocker les données et les transmettre entre les contrôleurs.

var myApp = angular.module('myApp', []); myApp.controller('JobListCtrl', ['$scope', '$element', '$http', '$log', 'reportJobModalData', function ($scope, $element, $http, $log, reportJobModalData) { $scope.reportJobModalData = reportJobModalData; $scope.callReportModal = function(test){ reportJobModalData.test = test; } }]); myApp.service('reportJobModalData', function(){ this.test = ''; }); 

Mon contrôleur modal et ma directive sont définis comme suit:

 myApp.controller('reportJobCtrl', function ($rootScope, $scope, $http, $log, reportJobModalData) { $scope.$log = $log; $scope.reportJobModalData = reportJobModalData; $scope.test = reportJobModalData.test; $log.info('test: ' + reportJobModalData.test); }); myApp.directive('sjReportJobModal', ['$rootScope', '$log', '$http', 'reportJobModalData', function ($rootScope, $log, $http, reportJobModalData) { return { ressortingct: 'E', templateUrl: 'report-job-modal-tpl', replace: true, transclude: true, link: function (scope) { } }; }]); 

et le modèle que j’utilise est celui-ci:

  

Ici, les données sont correctement imprimées sur le modal. Cependant, je ne peux pas accéder aux données du contrôleur, c’est-à-dire que $ scope.test est vide car je ne reçois que «test:» enregistré sur la console.

Qu’est-ce que je fais mal?

Merci beaucoup pour votre aide

essayez d’appliquer une surveillance sur la variable de service qui paraît au moment où la valeur est définie dans joblistctrl, votre reportjobctrl est exécuté.

alors placez ce code dans reportjobctrl et laissez-moi savoir les résultats

 $scope.$watch(function(){ return reportJobModalData.test}, function(new,old){ $scope.test=new; });