Jak wykonać funkcję kontrolera AngularJS podczas ładowania strony?

Obecnie mam stronę w Angular.js, która umożliwia wyszukiwanie i wyświetla wyniki. Użytkownik klika na wynik wyszukiwania, a następnie klika przycisk wstecz. Chcę, aby wyniki wyszukiwania zostały wyświetlone ponownie, ale nie mogę wymyślić, jak uruchomić wyszukiwanie, aby je wykonać. Oto szczegóły:

  • Moja strona Angular.js jest stroną wyszukiwania, z polem wyszukiwania i przyciskiem wyszukiwania. przycisk wyszukiwania. Użytkownik może ręcznie wpisać zapytanie i nacisnąć przycisk i a zapytanie ajaxowe jest wystrzeliwane i wyświetlane są wyniki. Aktualizuję adres URL za pomocą wyszukiwanego hasła. To wszystko działa dobrze.
  • Użytkownik klika na wynik wyszukiwania i zostaje przeniesiony na inną stronę - to też działa dobrze.
  • Użytkownik klika przycisk wstecz i wraca do mojej strony wyszukiwania kątowego, a poprawny adres URL jest wyświetlany, w tym wyszukiwane hasło. Wszystko działa dobrze.
  • Powiązałem wartość pola wyszukiwania z wyszukiwanym terminem w adresie URL, więc zawiera on oczekiwany termin wyszukiwania. Wszystko działa dobrze.

Jak mogę sprawić, aby funkcja wyszukiwania została wykonana ponownie bez konieczności naciskania przez użytkownika przycisku "szukaj"? Gdyby to było jquery, wykonałbym funkcję w funkcji documentready. Nie mogę'zobaczyć odpowiednika Angular.js.

Rozwiązanie

Z jednej strony, jak powiedział @Mark-Rajcok, możesz po prostu uciec z prywatną funkcją wewnętrzną:

// 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();

Możesz również rzucić okiem na dyrektywę ng-init. Implementacja będzie wyglądać podobnie:

// 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
};

Ale uważaj na to jako angular documentation implies (since v1.2) to NOT use ng-init for that. Jednak imo zależy to od architektury twojej aplikacji.

Użyłem ng-init, gdy chciałem przekazać wartość z back-end do aplikacji kątowej:

<div data-ng-controller="myCtrl" data-ng-init="init('%some_backend_value%')"></div>
Komentarze (9)

Spróbuj tego?

$scope.$on('$viewContentLoaded', function() {
    //call it here
});
Komentarze (5)

Możesz to zrobić, jeśli chcesz obserwować obiekt DOM viewContentLoaded, aby zmienić, a następnie coś zrobić. użycie $scope.$on działa również, ale inaczej, zwłaszcza gdy masz tryb jednej strony na swoim routingu.

 $scope.$watch('$viewContentLoaded', function(){
    // do something
 });
Komentarze (1)