#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);
}]);
Теперь это было бы намного лучше абстрагироваться как сервис, но это должно, по крайней мере, помочь вам начать.