Dokumentasi app.run () AngularJS?

337

Bagaimana dan dimana app.run()digunakan? Setelah definisi modul, setelah app.config()atau setelah app.controller()?

Saya mengadopsi BreezeJS Angular Q , yang menanyakan apakah kode tertentu dapat dijalankan dalam app.run()fungsinya.

pengguna3071284
sumber
2
dan setelah modul sudut .constants () telah diset
alfonsob

Jawaban:

650

Inilah urutan panggilan:

  1. app.config()
  2. app.run()
  3. fungsi kompilasi direktif (jika ditemukan di dom)
  4. app.controller()
  5. fungsi tautan direktif (sekali lagi, jika ditemukan)

Berikut ini adalah demo sederhana tempat Anda dapat menyaksikan setiap eksekusi (dan bereksperimen jika Anda mau).

Dari dokumen modul Angular :

Jalankan blok - dijalankan setelah injektor dibuat dan digunakan untuk memulai aplikasi. Hanya instance dan konstanta yang dapat disuntikkan ke blok run. Ini untuk mencegah konfigurasi sistem lebih lanjut selama waktu aplikasi dijalankan.

Jalankan blok adalah hal terdekat di Angular dengan metode utama. Run block adalah kode yang perlu dijalankan untuk memulai aplikasi. Ini dijalankan setelah semua layanan telah dikonfigurasi dan injektor telah dibuat. Jalankan blok biasanya berisi kode yang sulit untuk unit-test, dan untuk alasan ini harus dinyatakan dalam modul terisolasi, sehingga mereka dapat diabaikan dalam unit-tes.

Salah satu situasi di mana run block digunakan adalah selama otentikasi .

KayakDave
sumber
4
@ KayayakDave Saya tidak yakin apakah ini di luar topik, tetapi terkait dengan urutan proses yang Anda sebutkan di atas, kapan Layanan akan dimulai dan kapan akan dijalankan?
jonnie
3
Mungkin sedikit terlambat untuk membantu Anda @jonnieM, tetapi layanan akan dieksekusi tergantung pada kapan mereka diperlukan pertama - yaitu jika Anda pertama kali membutuhkan layanan dalam menjalankan blok, itu akan dijalankan segera sebelum blok itu. Adapun penyedia, mengganggu, mereka akan berjalan sebelum atau setelah blok konfigurasi - tergantung pada urutan mana mereka datang dalam kode. Menimbang bahwa satu-satunya saat Anda langsung menggunakan penyedia adalah pada tahap konfigurasi, ini sepertinya tidak benar.
Zac Seth
2
hai, saya telah bercabang dan memodifikasi sampel biola Anda untuk menunjukkan juga beban pabrik: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz
1
Luar biasa. Untuk lebih menyeluruh, fungsi app.constant () dipanggil sebelum semuanya ... Dan app.factory () dan fungsi layanan lainnya dipanggil "malas." Dengan kata lain, Angular menggunakan fungsi yang disediakan untuk membuat instance layanan hanya ketika controller atau layanan lain membutuhkannya disuntikkan, bahkan jika itu lama setelah aplikasi diinisialisasi.
Niko Bellic
Dalam proyek Ionic, secara default run dipanggil sebelum konfigurasi. Mengapa demikian ?
Rayjax
28

Secara khusus...

Bagaimana dan dimana app.run()digunakan? Setelah definisi modul atau setelah app.config(), setelah app.controller()?

Dimana:

Dalam paket Anda. Mis /packages/dashboard/public/controllers/dashboard.js

Bagaimana:

Jadikan terlihat seperti ini

var app = angular.module('mean.dashboard', ['ui.bootstrap']);

app.controller('DashboardController', ['$scope', 'Global', 'Dashboard',
    function($scope, Global, Dashboard) {
        $scope.global = Global;
        $scope.package = {
            name: 'dashboard'
        };
        // ...
    }
]);

app.run(function(editableOptions) {
    editableOptions.theme = 'bs3'; // bootstrap3 theme. Can be also 'bs2', 'default'
});
Michael Cole
sumber