来自一个控制器的值应该可供其他控制器使用

时间:2017-05-25 19:44:27

标签: javascript jquery angularjs

我正在进行角度应用,我有多个角度控制器。

请在下面找到示例代码:

app.controller('ctrlOne',function($rootScope, $scope, $uibModal, MyService) {

//have some functionality here
$scope.loadCtrlOneData = function () {
        alert("loadCtrlOneData");
        MyService.getSIDResult().then(
            function (response) {
        //business logic
       })
}}

app.controller('ctrlTwo', function ($rootScope, $scope, $uibModal, MyService) {
//some functionality here
function loadData() { //jQuery load to load the calendar in the field
MyService.getValueForDatePicker().then(
            function (response) {
              var cb = function(start, end, label) {
            //This function is called when user submit the date in datepicker
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
                    }
})
}
 loadData();
})

上面的代码是我的代码的粗略图片。当页面加载时,ctrlOne和ctrlTwo被加载。 CtrlTwo用于在输入字段中显示datePicker,如下面的代码所示:

<input id="reportrange" ng-controller="ctrlTwo">

当用户从日期选择器中选择日期并单击提交时,应再次调用ctrlOne并在ctrlOne中提供日期值,其中我有一些逻辑要实现并再次在浏览器上显示结果。请找到datepicker here的演示。请建议当用户选择日期时如何调用ctrlOne,然后点击提交,日期值应该可用于ctrlOne。

1 个答案:

答案 0 :(得分:1)

我知道这不是处理问题的最优雅方式,但如果我理解你想要实现的目标,我建议使用角度事件系统。有关详细信息,请参阅this博文。特别是使用$ rootScope。($ emit / $ broadcast)。

为了更清楚,您可以使用: ctrlTwo中的$rootScope.$broadcast('someEventName', someValue)然后

$scope.$on('someEventName', function (event, data) { //data passed in ctrlTwo })
ctrlOne中的