如何动态更新服务变量值

时间:2017-05-19 06:00:05

标签: javascript jquery angularjs

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

AnyHelp?!

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

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>

1 个答案:

答案 0 :(得分:0)

首先在服务中创建一个对象,如

,这是一种简单的方法
var date={};
date.currdate=value;

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