Javascript angularjs-在控制器之间传递数据

Javascript angularjs-在控制器之间传递数据,javascript,jquery,angularjs,controller,angularjs-directive,Javascript,Jquery,Angularjs,Controller,Angularjs Directive,我正在使用modals构建一个angular应用程序,我想在我的控制器之间传递一些数据来填充我的模态视图 我的主控制器是JobListCtrl,当我单击应该调用模态的链接时,会触发callReportModalData。我使用service reportJobModalData存储数据,并在控制器之间传递数据 var myApp = angular.module('myApp', []); myApp.controller('JobListCtrl', ['$scope', '$elemen

我正在使用modals构建一个angular应用程序,我想在我的控制器之间传递一些数据来填充我的模态视图

我的主控制器是JobListCtrl,当我单击应该调用模态的链接时,会触发callReportModalData。我使用service reportJobModalData存储数据,并在控制器之间传递数据

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 = '';

});
我的模态控制器和指令定义如下:

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 {
    restrict: 'E',

    templateUrl: 'report-job-modal-tpl',

    replace: true,

    transclude: true,

    link: function (scope) {
    }
  };
}]);
我使用的模板是:

<div class="modal fade" id="reportJobModal" tabindex="-1" role="dialog" aria-labelledby="reportJobModalLabel" aria-hidden="true" ng-controller="reportJobCtrl">
  <div class="modal-content ease">
    <section>
      {{ reportJobModalData.test }}
    </section>
  </div>
  <div class="modal-overlay ease" data-dismiss="modal"></div>
</div>

{{reportJobModalData.test}
在这里,数据被正确地打印在模型上。但是,我无法访问控制器中的数据,即$scope.test为空,因为我在控制台上只记录了“test:”

我做错了什么


非常感谢您的帮助

尝试对服务变量应用一个监视,当在joblistctrl中设置值时,您的报告JobCtrl将被执行

因此,请将此代码放在reportjobctrl中,并让我知道结果

$scope.$watch(function(){
return reportJobModalData.test},

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

您需要使用$broadcast

请检查以下url:


好吧,你说得对!谢谢$当页面加载时设置scope.test,因此没有值,因为没有单击任何链接。如何确保仅在调用模式时设置它?仅在调用模式时设置reportJobModalData.test的值可能在指令的链接函数中也会调用watch。如果有帮助,请选择作为答案。谢谢