เอกสารประกอบ AngularJS app.run ()?


337

ใช้อย่างไรและที่ไหนapp.run()? หลังจากนิยามโมดูลหลังapp.config()หรือหลังapp.controller()?

ฉันใช้BreezeJS Angular Qซึ่งถามว่ารหัสบางอย่างสามารถทำงานในapp.run()ฟังก์ชั่นนี้ได้หรือไม่


2
และหลังจากโมดูล. angstants () ใด ๆ ได้รับการตั้งค่า
alfonsob

คำตอบ:


650

นี่คือคำสั่งโทร:

  1. app.config()
  2. app.run()
  3. ฟังก์ชั่นการคอมไพล์ของ directive (หากพบใน dom)
  4. app.controller()
  5. ฟังก์ชั่นการเชื่อมโยงของ directive (หากพบอีกครั้ง)

นี่คือตัวอย่างง่ายๆที่คุณสามารถดูการดำเนินการแต่ละรายการ (และทดลองหากคุณต้องการ)

จากเอกสารโมดูลของ Angular :

Run blocks - เรียกใช้งานหลังจากสร้าง injector และใช้เพื่อเริ่มต้นแอปพลิเคชัน อินสแตนซ์และค่าคงที่เท่านั้นที่สามารถถูกฉีดเข้าไปในบล็อกที่รัน นี่คือการป้องกันการกำหนดค่าระบบเพิ่มเติมในช่วงเวลาทำงานของโปรแกรมประยุกต์

Run blocks เป็นสิ่งที่ใกล้เคียงที่สุดใน Angular กับวิธีการหลัก บล็อกการเรียกใช้คือรหัสที่จำเป็นต้องเรียกใช้เพื่อเริ่มต้นแอปพลิเคชัน มันจะถูกดำเนินการหลังจากบริการทั้งหมดได้รับการกำหนดค่าและสร้างหัวฉีด โดยทั่วไปบล็อกการรันมีโค้ดที่ยากต่อการทดสอบหน่วยและด้วยเหตุผลนี้ควรประกาศในโมดูลแยกเพื่อให้สามารถละเว้นในการทดสอบหน่วย

สถานการณ์หนึ่งที่ทำงานบล็อกถูกนำมาใช้เป็นช่วงauthentications


4
@KayakDave ฉันไม่แน่ใจว่านี่เป็นหัวข้อปิดหรือไม่ แต่เกี่ยวข้องกับลำดับการทำงานที่คุณกล่าวถึงข้างต้นบริการจะเริ่มเมื่อใดและจะเริ่มทำงานเมื่อใด
jonnie

3
อาจจะสายไปสักหน่อยที่จะช่วยคุณ @jonnieM แต่บริการต่างๆจะถูกดำเนินการขึ้นอยู่กับเวลาที่พวกเขาต้องการก่อน - เช่นถ้าคุณต้องการบริการในบล็อกแบบรันครั้งแรกมันจะทำงานทันทีก่อนที่บล็อกนั้น สำหรับผู้ให้บริการที่น่ารำคาญพวกเขาจะเรียกใช้ก่อนหรือหลังบล็อกการตั้งค่า - ขึ้นอยู่กับการสั่งซื้อที่พวกเขามาในรหัส พิจารณาว่าครั้งเดียวที่คุณใช้ผู้ให้บริการโดยตรงอยู่ในขั้นตอนการกำหนดค่าดูเหมือนจะไม่ถูกต้อง
Zac Seth

2
สวัสดีฉันได้แยกและแก้ไขตัวอย่างซอของคุณเพื่อแสดงการโหลดจากโรงงาน: jsfiddle.net/lorezz/4cxgpLqj/1
Lorezz

1
น่ากลัว เพื่อให้ทั่วถึงฟังก์ชั่น app.constant () จะถูกเรียกใช้ก่อนทุกอย่าง ... และ app.factory () และฟังก์ชั่นบริการอื่น ๆ จะถูกเรียกว่า "ขี้เกียจ" กล่าวอีกนัยหนึ่ง Angular ใช้ฟังก์ชั่นที่มีให้เพื่อสร้างอินสแตนซ์บริการเฉพาะเมื่อตัวควบคุมหรือบริการอื่นต้องการมันถึงแม้ว่ามันจะนานหลังจากที่แอพเริ่มต้น
Niko Bellic

ในโครงการอิออนโดยค่าเริ่มต้นเรียกใช้ก่อนที่จะกำหนดค่า ทำไมถึงเป็นอย่างนั้น?
Rayjax

28

โดยเฉพาะ ...

ใช้อย่างไรและที่ไหนapp.run()? หลังจากนิยามโมดูลหรือหลัง app.config()หลังจากที่app.controller()?

ที่ไหน:

ใน package.js ของคุณเช่น /packages/dashboard/public/controllers/dashboard.js

วิธี:

ทำให้มันเป็นแบบนี้

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'
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.