Kako izvesti funkcijo kontrolerja AngularJS ob nalaganju strani?

Trenutno imam stran Angular.js, ki omogoča iskanje in prikazuje rezultate. Uporabnik klikne na rezultat iskanja, nato pa klikne gumb nazaj. Želim, da se rezultati iskanja ponovno prikažejo, vendar ne morem ugotoviti, kako naj sprožim izvajanje iskanja. Tukaj so podrobnosti:

  • Moja stran Angular.js je iskalna stran z iskalnim poljem in iskalnim rezultatom. gumbom. Uporabnik lahko ročno vnese poizvedbo in pritisne gumb ter in sproži se poizvedba ajax ter prikažejo se rezultati. URL posodobim z iskalnim izrazom. Vse to deluje v redu.
  • Če uporabnik klikne na rezultat iskanja in je preusmerjen na drugo stran, tudi to deluje v redu.
  • Uporabnik klikne gumb nazaj in se vrne na mojo angularno iskalno stran, pri čemer se prikaže pravilen URL, vključno z iskalno besedo. Vse deluje v redu.
  • Vrednost iskalnega polja sem povezal z iskalnim izrazom v naslovu URL, tako da vsebuje pričakovani iskalni izraz. Vse deluje v redu.

Kako naj poskrbim, da se funkcija iskanja ponovno izvede, ne da bi uporabnik moral pritisniti gumb za iskanje? Če bi šlo za jquery, bi izvedel funkcijo v funkciji documentready. Ne vidim enakovredne funkcije za Angular.js.

Rešitev

Po eni strani, kot je dejal @Mark-Rajcok, se lahko izognete zasebni notranji funkciji:

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

Prav tako si lahko ogledate direktivo ng-init. Izvedba bo zelo podobna:

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

Vendar pazite na to, saj angularna dokumentacija nakazuje (od različice 1.2), da za to NE smete uporabljati ng-init. Vendar je to odvisno od arhitekture vaše aplikacije.

Sam sem uporabil ng-init, ko sem želel prenesti vrednost iz zaledja v angularno aplikacijo:

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

Poskusite to?

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

To lahko storite, če želite opazovati spremembo objekta DOM viewContentLoaded in nato nekaj storiti.Tudi uporaba $scope.$on deluje, vendar drugače, zlasti če imate pri usmerjanju način ene strani.

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