Ako vykonať funkciu radiča AngularJS pri načítaní stránky?

V súčasnosti mám stránku Angular.js, ktorá umožňuje vyhľadávanie a zobrazuje výsledky. Používateľ klikne na výsledok vyhľadávania a potom klikne na tlačidlo späť. Chcem, aby sa výsledky vyhľadávania opäť zobrazili, ale neviem prísť na to, ako spustiť vykonanie vyhľadávania. Tu je detail:

  • Moja stránka Angular.js je stránka s vyhľadávaním, s vyhľadávacím poľom a vyhľadávaním tlačidlom. Používateľ môže ručne zadať dotaz a stlačiť tlačidlo a a spustí sa ajaxový dotaz a zobrazia sa výsledky. Aktualizujem adresu URL s hľadaným výrazom. To všetko funguje v poriadku.
  • Používateľ klikne na výsledok vyhľadávania a dostane sa na inú stránku - to tiež funguje v poriadku.
  • Používateľ klikne na tlačidlo späť a vráti sa na moju stránku s angulárnym vyhľadávaním a zobrazí sa správna adresa URL vrátane hľadaného výrazu. Všetko funguje v poriadku.
  • Hodnotu vyhľadávacieho poľa som viazal na hľadaný výraz v adrese URL, takže obsahuje očakávaný hľadaný výraz. Všetko funguje v poriadku.

Ako dosiahnem, aby sa funkcia vyhľadávania opäť spustila bez toho, aby používateľ musel stlačiť tlačidlo "search"? Ak by to bolo jquery, potom by som vykonal funkciu vo funkcii documentready. Nevidím ekvivalent Angular.js.

Riešenie

Na jednej strane, ako povedal @Mark-Rajcok, môžete sa jednoducho zbaviť súkromnej vnútornej funkcie:

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

Tiež sa môžete pozrieť na direktívu ng-init. Implementácia bude veľmi podobná:

// 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 dajte si na to pozor, pretože dokumentácia angularu naznačuje (od verzie 1.2), aby ste na to nepoužívali ng-init. Avšak imo to závisí od architektúry vašej aplikácie.

Ja som použil ng-init, keď som chcel odovzdať hodnotu z back-endu do angular aplikácie:

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

Vyskúšajte toto?

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

Môžete to urobiť, ak chcete sledovať, či sa objekt DOM viewContentLoaded zmení, a potom niečo urobiť. použitie $scope.$on funguje tiež, ale inak, najmä ak máte na smerovaní režim jednej stránky.

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