Как да изпълня функцията на контролера AngularJS при зареждане на страницата?

В момента имам Angular.js страница, която позволява търсене и показва резултати. Потребителят щраква върху резултат от търсенето, след което щраква върху бутона за връщане. Искам резултатите от търсенето да се покажат отново, но не мога да разбера как да задействам изпълнението на търсенето. Ето каква е подробността:

  • Моята Angular.js страница е страница за търсене, с поле за търсене и бутон. Потребителят може ръчно да въведе заявка и да натисне бутона и и се задейства ajax заявка и се показват резултатите. Актуализирам URL адреса с термина за търсене. Всичко това работи добре.
  • Потребителят щраква върху резултата от търсенето и е отведен на друга страница - това също работи добре.
  • Потребителят щраква върху бутона за връщане и се връща на моята angular страница за търсене и се показва правилният URL адрес, включително и терминът за търсене. Всичко работи добре.
  • Свързал съм стойността на полето за търсене с термина за търсене в URL адреса, така че той съдържа очаквания термин за търсене. Всичко работи добре.

Как да накарам функцията за търсене да се изпълни отново, без да се налага потребителят да натиска "бутона за търсене"? Ако това беше jquery, тогава щях да изпълня функция във функцията documentready. Не виждам еквивалента на Angular.js.

Решение

От една страна, както каза @Mark-Rajcok, можете просто да се измъкнете с частна вътрешна функция:

// at the bottom of your controller
var init = function () {
   // check if there is query in url
   // and fire search in case its value is not empty
};
// and fire it after definition
init();

Също така можете да разгледате директивата ng-init. Изпълнението ще бъде подобно на:

// register controller in html
<div data-ng-controller="myCtrl" data-ng-init="init()"></div>

// in controller
$scope.init = function () {
    // check if there is query in url
    // and fire search in case its value is not empty
};

Но внимавайте за това, тъй като документацията на angular предполага (от версия 1.2) да НЕ използвате ng-init за това. Все пак, според мен, това зависи от архитектурата на вашето приложение.

Аз използвах ng-init, когато исках да предам стойност от back-end в angular приложението:

<div data-ng-controller="myCtrl" data-ng-init="init('%some_backend_value%')"></div>
Коментари (9)

Опитайте това?

$scope.$on('$viewContentLoaded', function() {
    //call it here
});
Коментари (5)

Можете да направите това, ако искате да наблюдавате промяната на DOM обекта viewContentLoaded и след това да направите нещо.Използването на $scope.$on също работи, но по различен начин, особено когато имате режим на една страница при маршрутизацията.

 $scope.$watch('$viewContentLoaded', function(){
    // do something
 });
Коментари (1)