Функция углового запуска при трансляции и загрузке страницы

#javascript #jquery #angularjs

#javascript #jquery #angularjs

Вопрос:

У меня есть контроллер, как показано ниже, с .$on атрибутом, который вызывается через .$broadcast при отправке формы. Я также хотел бы, чтобы событие запускалось при загрузке контроллера. Есть ли синтаксически простой способ сделать это, или мне придется добавить on page load слушателя?

 myApp.controller('DownloadsCloudCtrl', ['$scope', 
                                        '$rootScope', 
                                        'requestService',
  function($scope, $rootScope, requestService){
  $scope.title = 'Most Popular Keywords';
  $scope.tooltip = 'Test tooltip';
  $rootScope.$on('updateDashboard', function(event, month, year) {
    requestService.getP2PKeywordData(month, year).then(function(data) {
      $scope.d3Data = data;
    });
  });
}]);
 

Комментарии:

1. Что вы имеете в виду, когда страница загружается в первый раз ? Почему бы просто не запустить нужный код при загрузке контроллера?

2. Конечно, извините, это лучший способ выразить это. Я бы хотел, чтобы она запускалась при загрузке контроллера.

3. Тот же вопрос, что и у Мэтта. Не могли бы вы просто транслировать при загрузке контроллера?

4. О, я понимаю … это лучший способ решить эту проблему? Если да, то спасибо

5. Кажется, довольно просто использовать трансляцию. Я бы, вероятно, подумал о том, чтобы поместить трансляцию в службу, которой могли бы пользоваться все контроллеры. Но это скорее проблема стиля.

Ответ №1:

Если вы хотите запустить это при загрузке вашего контроллера, то это очень просто. По сути, удалите свою $on логику в ее собственную функцию и вызовите ее внутри инициализации контроллера:

 myApp.controller('DownloadsCloudCtrl', ['$scope', '$rootScope', 'requestService',
function($scope, $rootScope, requestService){
    $scope.title = 'Most Popular Keywords';
    $scope.tooltip = 'Test tooltip';

    var updateDash = function(month, year) {
        requestService.getP2PKeywordData(month, year).then(function(data) {
            $scope.d3Data = data;
        });
    };

    $rootScope.$on('updateDashboard', function(event, month, year) {
        // run the update function
        updateDash(month, year);
    });

    // run the update function once when the controller loads
    updateDash(someMonth, someYear);
}]);
 

Теперь это было бы намного лучше абстрагироваться как сервис, но это должно, по крайней мере, помочь вам начать.