如何动态更新服务变量值



我在服务中定义了一个日期值,供我的所有控制器使用(即当站点加载时,该值被初始化并发送给使用它的所有控制器(,现在我希望能够动态地从所有控制器更新此变量。 即,当日期从其中一个控制器更新到此服务时 - 应将更新的值(再次初始化(发送到所有控制器。在那里,允许我在整个网站上有一个共同的日期。

任何帮助?!

这是我的服务代码以及使用它并更新的控制器之一(虽然不起作用(:

appOne.factory('dates',function($rootScope){
        $rootScope.startDateCal   = moment().subtract(127, 'days');
        $rootScope.endDateCal   = moment();
 });
 
 appOne.controller("ControllerOne",['$scope','$http','apiUrl','$state','$timeout','$interval','dates', function($rootScope, $http,apiUrl,$state,
$timeout,$interval,dates){
    $scope = this;
     
    var apiURL = apiUrl ;
$scope.cb= function(start, end){
    // console.log(start.format('D MMMM YYYY') + ' - ' + end.format('D MMMM YYYY'));
        $('#dateRange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
        startDateCal = start;
        endDateCal = end;
        if($('#sel_deviceType').length){
            type = $('#sel_deviceType').val();
        } else {
            type = "A";
        }
        $scope.loadChart(parseInt(start/1000),parseInt(end/1000), appKey, type);
                 
    }
     
     $('#dateRange').on('apply.daterangepicker', function(ev, picker) {
                      // trying to update the service variable 
                            $rootScope.startDateCal = moment.utc(startDateCal).format('LL');;
                            $rootScope.endDateCal = moment.utc(endDateCal).format('LL');;
    });   
    $scope.cb($rootScope.startDateCal,$rootScope.endDateCal);
    $('#dateRange').daterangepicker({
    ranges: {
       'Today': [moment(), moment()],
       'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
       'This Week': [moment().startOf('week'), moment().endOf('week')],
       'Last Week': [moment().subtract(1, 'week').startOf('week'), moment().subtract(1, 'week').endOf('week')],
       'This Month': [moment().startOf('month'), moment().endOf('month')],
       'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
locale: {
     format: 'YYYY-MM-DD',
     applyLabel: "Select"
},
startDate: $rootScope.startDateCal,
endDate: $rootScope.endDateCal
}, $scope.cb);
)}

appOne.controller("ControllerTwo",['$scope','$http','apiUrl','$state','$timeout','$interval','dates', function($rootScope, $http,apiUrl,$state,
$timeout,$interval,dates){
    $scope = this;
     
    var apiURL = apiUrl ;
$scope.cb= function(start, end){
    // console.log(start.format('D MMMM YYYY') + ' - ' + end.format('D MMMM YYYY'));
        $('#dateRange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
        startDateCal = start;
        endDateCal = end;
        if($('#sel_deviceType').length){
            type = $('#sel_deviceType').val();
        } else {
            type = "A";
        }
        $scope.loadChart(parseInt(start/1000),parseInt(end/1000), appKey, type);
                 
    }
     
     $('#dateRange').on('apply.daterangepicker', function(ev, picker) {
                      // trying to update the service variable 
                            $rootScope.startDateCal = moment.utc(startDateCal).format('LL');;
                            $rootScope.endDateCal = moment.utc(endDateCal).format('LL');;
    });   
    $scope.cb($rootScope.startDateCal,$rootScope.endDateCal);
    $('#dateRange').daterangepicker({
    ranges: {
       'Today': [moment(), moment()],
       'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
       'This Week': [moment().startOf('week'), moment().endOf('week')],
       'Last Week': [moment().subtract(1, 'week').startOf('week'), moment().subtract(1, 'week').endOf('week')],
       'This Month': [moment().startOf('month'), moment().endOf('month')],
       'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
locale: {
     format: 'YYYY-MM-DD',
     applyLabel: "Select"
},
startDate: $rootScope.startDateCal,
endDate: $rootScope.endDateCal
}, $scope.cb);
)}
<div id="dateRange"></div>

有一个简单的方法可以做到这一点,首先在服务中创建一个对象,例如

var date={};
date.currdate=value;

然后,在服务中返回此日期,并且可以在所有控制器中使用此日期,还可以动态更改或更新日期值。

最新更新