Sayfa yüklendiğinde AngularJS denetleyici işlevi nasıl yürütülür?

Şu anda arama yapmaya izin veren ve sonuçları görüntüleyen bir Angular.js sayfam var. Kullanıcı bir arama sonucuna tıklıyor, ardından geri düğmesine tıklıyor. Arama sonuçlarının tekrar görüntülenmesini istiyorum ancak aramanın yürütülmesini nasıl tetikleyeceğimi bulamıyorum. İşte detaylar:

  • Angular.js sayfam bir arama sayfasıdır, bir arama alanı ve bir arama Düğme. Kullanıcı bir sorguyu manuel olarak yazabilir ve bir düğmeye basabilir ve ve ajax sorgusu ateşlenir ve sonuçlar görüntülenir. URL'yi arama terimi ile güncelliyorum. Hepsi iyi çalışıyor.
  • Kullanıcı aramanın bir sonucuna tıklıyor ve farklı bir sayfaya yönlendiriliyor - bu da sorunsuz çalışıyor.
  • Kullanıcı geri düğmesine tıklıyor ve angular arama sayfama geri dönüyor ve arama terimi de dahil olmak üzere doğru URL görüntüleniyor. Hepsi iyi çalışıyor.
  • Arama alanı değerini URL'deki arama terimine bağladım, böylece beklenen arama terimini içeriyor. Her şey düzgün çalışıyor.

Kullanıcının "arama düğmesine" basmasına gerek kalmadan arama işlevinin tekrar çalışmasını nasıl sağlayabilirim? Eğer jquery olsaydı, documentready fonksiyonu içinde bir fonksiyon çalıştırırdım. Angular.js eşdeğerini göremiyorum.

Çözüm

Bir yandan @Mark-Rajcok'un dediği gibi, özel iç işlevden kurtulabilirsiniz:

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

Ayrıca ng-init yönergesine de göz atabilirsiniz. Uygulama çok benzer olacaktır:

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

Ancak angular dokümantasyonu (v1.2'den beri) bunun için ng-init kullanmamayı ima ettiği için buna dikkat edin. Ancak imo uygulamanızın mimarisine bağlıdır.

Arka uçtan angular uygulamasına bir değer aktarmak istediğimde ng-init kullandım:

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

Şunu dener misin?

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

viewContentLoaded DOM nesnesinin değişmesini izlemek ve ardından bir şeyler yapmak istiyorsanız bunu yapabilirsiniz. $scope.$on kullanmak da işe yarar, ancak özellikle yönlendirmenizde tek sayfa modu olduğunda farklıdır.

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