AngularJS 如何在控制台進行錯誤調試_AngularJS

來源:互聯網
上載者:User

當我們在編寫 AngularJS 的應用時,通過 Chrome, Firefox, 和 IE 的 JavaScript 控制台來擷取隱藏在應用之中的資料(Data)和服務(Service) 是一件非常具有挑戰性的工作。下面列出了一些簡單的小竅門,可以協助我們使用 Javascript 控制台來監視和控制一個正在啟動並執行 Angular 應用,使其更加容易測試、修改甚至是即時的編寫 Angular 應用。

1: 擷取 Scopes (範圍)

我們可以使用一行 JS 代碼來擷取任何的 Scope (甚至是 isolated scopes) :

複製代碼 代碼如下:
> angular.element(targetNode).scope()
-> ChildScope {$id: "005", this: ChildScope, $$listeners: Object, $$listenerCount: Object, $parent: Scope…}

或者擷取 isolated scopes:

複製代碼 代碼如下:
> angular.element(targetNode).isolateScope()
-> Scope {$id: "009", $$childTail: ChildScope, $$childHead: ChildScope, $$prevSibling: ChildScope, $$nextSibling: Scope…}

這裡面的 targetNode 指的是 HTML Node(HTML節點)。你可以很容易的使用 document.querySelector() 來擷取。

2: 監視 Scope Tree (範圍樹)

為了更好的調試我們的應用,有些時候我們需要查看頁面上的 Scope (範圍) 的結構師怎樣的。這時候我們就需要使用 AngularJS
 Baratang 和 ng-inspector 這兩個 Chrome 瀏覽器延伸來協助我們即時查看 Scope (範圍) 的情況。並且,這兩個擴充還有一些其他非常有用的功能。

    (1).AngularJS Baratang

    (2).ng-inspector

3: 抓取 Services (服務)

我們可以使用定義了 ngApp 元素的 injector 函數來抓取任何 Service (服務) 或者間接的通過任何帶有 ng-scope class 的元素來擷取 Service (服務)。

複製代碼 代碼如下:
> angular.element(document.querySelector('html')).injector().get('MyService')
-> Object {undo: function, redo: function, _pushAction: function, newDocument: function, init: function…}
// Or slightly more generic
> angular.element(document.querySelector('.ng-scope')).injector().get('MyService')

接下來我們就可以使用相關的 Service 就像我們在程式中 injected(注入)過之後那樣使用。

4: 從 directive 中擷取 controller

有一些 directives (指令) 會將一些特定(通常是可以共用的)功能定義成為一個控制器。為了從控制台中擷取一個指定 directive (指令) 的 controller (控制器) 樣本, 我們只需要使用 controller() 函數。

複製代碼 代碼如下:
> angular.element('my-pages').controller()
-> Constructor {}

最後一個不常用但是屬於更進階的技巧。

5: Chrome Console(控制台) 特性

Chrome 有很多在 console (控制台) 中用於調試網頁應用的非常好用的快捷命令。下面是對 Angular 開發最有協助的一些命令:

    $0 - $4: 在 instpector window (監控器) 中擷取最後的 5 個 DOM 元素。這個快捷方法可以非常方便的協助我們來抓取選定元素的 scopes (範圍) : angular.element($0).scope()

    $(selector) 和 $$(selector): 可以方便的替代 querySelector() 和 querySelectorAll。

感謝 @zgohr 提供的這個小竅門!

總結

通過這些簡單的小竅門,我們可以擷取任意 scope (範圍) 中的資料、監控scope (範圍) 的層級、注入 services (服務) 並且 控制 directives (指令)。

所以下次,當你想要做一些微調、檢查代碼或者從控制台來控制一個 AngularJS 應用,我希望你能夠像我一樣記起這些小竅門並多加使用。

查看更多AngularJS的文法,大家可以關註:AngularJS 參考手冊英文版,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.