Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用多个广播根据用户选择调用角度控制器_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 如何使用多个广播根据用户选择调用角度控制器

Javascript 如何使用多个广播根据用户选择调用角度控制器,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我正在开发angularjs应用程序。在我的网页中,我有许多数据范围选择器。当用户从日期选择器中选择日期范围时,我需要将所选日期传递给分配给该组件的特定角度控制器。请参阅下面的代码,当用户从日期选择器中选择日期范围时调用该代码,当单击应用时,我使用$broadcast将所选日期传递给另一个控制器 var cb = function(start, end) { $('.reportrange span').html(start.format('MMMM D, YYYY') + ' - ' +

我正在开发angularjs应用程序。在我的网页中,我有许多数据范围选择器。当用户从日期选择器中选择日期范围时,我需要将所选日期传递给分配给该组件的特定角度控制器。请参阅下面的代码,当用户从日期选择器中选择日期范围时调用该代码,当单击应用时,我使用$broadcast将所选日期传递给另一个控制器

var cb = function(start, end) {
   $('.reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
  var reportStartDate  = start.format('MM-DD-YYYY');
   var reportEndDate = end.format('MM-DD-YYYY');
    $rootScope.$broadcast('loadSimDateCtrl', reportStartDate, reportEndDate);/*When user selects a date range in daterangepicker, this function is invoked,
    the selected date is passed to the angular controller using broadcast*/
 }
当我的单个html文件中有多个日期范围选择器时,如何知道选择了哪个日期范围选择器。根据为特定日期选择器选择的日期,我需要将日期范围传递给特定的角度控制器。请给我一些建议

给出了一个粗略的例子。 当用户从SIM Date Range ctrl中选择一个darerange时,我需要通过传递所选日期来调用SIMDATECRL。其他日期选择器也是如此。请给我一些建议。 在单个函数中,
var cb=function(start,end){.}
如何调用$broadcast,后者反过来调用另一个角度控制器。

angular.module('myApp',[])
.controller('MyCtrl'、['$scope'、'$http'、'$rootScope',MyCtrl])
函数MyCtrl($scope、$http、$rootScope){
$scope.callBackend1=函数(事件){
console.log('Check1')
$rootScope.$broadcast('date1','start1','end1')
//此处调用后端,如果可能,使用$http服务
}
$scope.callBackend2=函数(事件){
console.log('Check2')
$rootScope.$broadcast('date2','start2','end2')
//此处调用后端,如果可能,使用$http服务
}
$rootScope.$on('date1',函数(事件、数据){
console.log(数据)
})
$rootScope.$on('date2',函数(事件、数据){
console.log(数据)
})
}




选择电话日期范围:
不要使用广播,因为它会向下传播到嵌套的控制器,不能保证所有子级都会收到该通知。而是编写一个在发布时发出事件的服务,您可以在任何控制器中订阅该事件。在MyCtrl中,您可以为每个daterange选择器指定不同的作用域函数更改/选择所指出的事件

;(function(angular) {
    "use strict";

    angular.module('myApp').factory('PubSub', PubSub);
    PubSub.$inject = ['$rootScope'];

    function PubSub($rootScope) {
        var service = {};

        service.subscribe = function(eventname, callback) {
            $rootScope.$on(eventname, callback);
        }

        service.publish = function(eventname) {
            var args = Array.prototype.slice.call(arguments, 1);
            var argv = {
                argv: args
            };
            $rootScope.$emit(eventname, argv);
        }

        service.unsubscribe = function(handler) {
            handler();
        }

        return service;
    }

    angular.module('myApp').controller('MyCtrl', MyCtrl);
    MyCtrl.$inject = ['$scope', 'PubSub'];

    function MyCtrl($scope, PubSub) {
        $scope.callBackend1 = function(event) {
            console.log('Check1')
            PubSub.publish('date1', 'start1', 'end1')
            // here call to backend, if possible do with $http service
        }
        $scope.callBackend2 = function(event) {
            console.log('Check2')
            PubSub.publish('date2', 'start2', 'end2')
            // here call to backend, if possible do with $http service
        }
    }

    angular.module('myApp').controller('Date1Ctrl', Date1Ctrl);
    Date1Ctrl.$inject = ['$scope', 'PubSub'];

    function Date1Ctrl($scope, PubSub) {

        PubSub.subscribe('date1', date1Changed);

        function date1Changed(args) {
            // Do your actions here
        }
    }

    angular.module('myApp').controller('Date2Ctrl', Date2Ctrl);
    Date2Ctrl.$inject = ['$scope', 'PubSub'];

    function Date2Ctrl($scope, PubSub) {
        PubSub.subscribe('date2', date2Changed);

        function date2Changed(args) {
            // Do your actions here
        }
    }

})(angular);

它可以播放不同的事件。例如$rootScope.$broadcast('loadSimDate1',reportStartDate,reportEndDate)$rootScope.$broadcast('loadSimDate2',reportStartDate,reportEndDate)但当用户从第一个日期范围选择器中选择日期时,我应该知道日期是从第一个日期范围选择器中选择的,这样我就可以调用相应的控制器。同样,当用户从第二个日期范围选择器中选择日期时,我应该调用know,这样我就可以调用相应的角度控制器。请参见@J jin该过程是:当用户从第一个日期范围选择器选择日期时,它使用“ng change=“callBackend1($event)”,在callBackend1中调用广播“loadSimDate1”,然后在相应的控制器中发出“loadSimDate1”。因此,对于2st daterange选择器。@JJin-您能在我的演示@participantjava中给出一个简单的示例吗?对于相同的功能,您不需要两个控制器。我们可以定制一个可以接受任何日期选择器值的控制器,因为整个应用程序中日期选择器的功能是相同的,对吗