Обмен данными между контроллерами с использованием $broadcast

Для обмена данными между контроллерами обычно используется сервис.

Я обнаружил, что с помощью $rootScope.$broadcast действительно удобно, если данные, которыми я должен поделиться [] или {},

Для меня преимущество использования широковещания заключается в том, что вам не нужно использовать watcher для проверки, загружены ли данные в сервис. Также меньше кода для записи.

Итак, мои вопросы:

  • Можно ли использовать $broadcast?
  • Есть ли неудобство при использовании $ трансляции

Вот несколько примеров использования обеих "техник", чтобы показать, что я имею в виду.

Пример использования $rootScope.$broadcast

// controller is registering 'list-loaded'
angular.module('myApp').controller(
    'ControllerOne'
            ['$rootScope','$scope',
                function ($rootScope, $scope) {

                    // the data
                    $scope.data = {
                        list : ["foo","bar"]
                    }
                    // sending the event with the data
                    $rootScope.$broadcast('list-loaded', { list: $scope.data.list });
                }
            ]
);

//controller is listening for 'list-loaded'
angular.module('myApp').controller(
    'ControllerTwo',
            ['$rootScope','$scope',
                function ($rootScope, $scope) {

                    // empty data
                    $scope.data = {}

                    // when the event is received we set the data
                    $scope.$on('list-loaded', function(event, args) {
                        $scope.data.list = args.list;
                    });
                }
            ]
);

Пример использования сервиса

// the service
angular.module('myApp').factory(
    'Service',
        [ 

            function() {
                // the data to be shared
                var list = []

                return {
                    setList : function(pList){
                        list = pList;
                    },
                    getList : function(){
                        return list;
                    }

                };
            }
        ]
);

//controller is setting list into Service
angular.module('myApp').controller(

    'ControllerOne',
            ['$scope', 'Service',

                function ($scope, Service) {

                    // setting the data to service
                    Service.setList(["foo","bar"])
                }
            ]
);

//controller is getting list from Service
angular.module('myApp').controller(
    'ControllerTwo',
            ['$scope','Service',

                function ($scope, Service) {

                    // getting the data from service
                    $scope.data = {
                        list : Service.getList()
                    }
                }
            ]


);

0 ответов

Другие вопросы по тегам