簡體   English   中英

AngularJS的javascript執行順序

[英]javascript execution order with AngularJS

我將要維護其他人的網站,並且發現了這樣的代碼塊(為了簡化代碼示例,我刪除了丟失的代碼)

    var Application = (function ($, global) {
    'use strict';
    global.site = global.site || {};
    global.site.App = App;

    function App() {
       // code removed
    }

    App.getState = function () {
        return 'standard';
    };

    App.setState = function () {
        // Set current state on load
        site.App.currentState = site.App.getState();
    };

    //a lot of code was removed

    return {
        init:function(){

            global.site.app = new global.site.App();

            // Set browser sate on load
            site.App.setState();
            console.log('Application: site.App.currentState', site.App.currentState);  
        }
    }

}(window.jQuery, window));

$(Application.init);

var siteApp = angular.module('siteApp', []);
siteApp.controller('AppController', function() {
      console.log('AppController: site.App.currentState', site.App.currentState);
});

問題是,即使我把var Application = (function ($, global) {...}(window.jQuery, window)); 在angularjs模塊上方,angularjs模塊首先運行。 而且我不得不承認我沒有完全理解var Application ...設計模式的工作方式,所以我的問題是:

  1. 我怎樣才能使$(Application.init); 首先運行?。
  2. (Application.init)是哪種設計模式,所以我可以對其進行膠凝並嘗試理解它

任何幫助表示贊賞。

您可以嘗試刪除

$(Application.init)

和直接呼叫

Application.init() 

A)該代碼過於復雜,應將其移至Angular服務/值/工廠

B)要管理代碼順序,您還可以刪除ng-app="App"並自行引導Angular:

  angular.element(document).ready(function () {
    Application.init();
    angular.bootstrap(document, ['App']);
  }

C)該代碼使用模塊模式,例如http://toddmotto.com/mastering-the-module-pattern

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM