2016-02-05 4 views
12

Есть ли какой-либо способ получить доступ к конкретным данным по конкретному компоненту Angular2 в консоли для целей отладки?Как получить доступ к данным на компоненте Angular2 в консоли?

Как и у Angular1, есть возможность получить доступ к его компонентам в консоли.

+1

Возможно, это не то, что вы ищете, но мне все же полезно использовать 'console.log (JSON.stringify (this))' иногда. –

+0

Спасибо @Mark, проверит, что .. вы хотите разместить эту консоль в моей консоли в классе компонентов? Не поймите меня неправильно, просто спрашивайте. –

+0

Поместите его в любой метод, который даст вам необходимую видимость: в конструкторе компонента, в ngOnInit(), в ngOnChanges(), в обработчике событий и т. Д. –

ответ

25

обновление 4.0.0

StackBlitz example

обновление RC.1

Plunker example В консоли браузера на верхнем левом углу (символ фильтра) выберите plunkerPreviewTarget (или запустить демо приложение в его собственном окне), затем введите, например,

Выберите компонент в DOM n ода и выполнить в консоли

ng.probe($0); 

Alternative

Подсказка: включение отладки инструментов переопределяет ng.probe()

Включить отладочные инструменты, такие как:

import {enableDebugTools} from '@angular/platform-browser'; 

bootstrap(App, []).then(appRef => enableDebugTools(appRef)) 

Использование выше примере Plunker и в консоли выполните, например:

  • ng.profiler.appRef
  • ng.profiler.appRef._rootComponents[0].instance
  • ng.profiler.appRef._rootComponents[0].hostView.internalView
  • ng.profiler.appRef._rootComponents[0].hostView.internalView.viewChildren[0].viewChildren

Я не нашел способ еще исследовать Bar директиву.

Лучший опыт отладки обеспечивается предзнаменование, который строит на этом API

оригинал (бета)

Вот резюме, как сделать это https://github.com/angular/angular/blob/master/TOOLS_JS.md

Включение отладки инструментов

По умолчанию отладочных инструментов отключены.Вы можете включить отладочные инструменты следующим образом:

import {enableDebugTools} from 'angular2/platform/browser'; 

bootstrap(Application).then((appRef) => { 
    enableDebugTools(appRef); 
}); 

Использование отладочных инструментов

В браузере откройте консоль разработчика (Ctrl + Shift + J в Chrome). Объект верхнего уровня называется ng и содержит в нем более конкретные инструменты.

Пример:.

ng.profiler.timeChangeDetection(); 

Смотри также

+1

Я исследовал больше и нашел трудный способ, о котором упоминается здесь https://github.com/angular/angular/issues/3689#issuecomment-181020512 (см. Также этот ожидающий PR https://github.com/angular/angular/commit/e1bf3d33f8a1fa05a832b9b7ee1300ef9862fd0b) –

+1

Эта проблема, вероятно, также связана с https://github.com/angular/angular/issues/7045 –

+0

Некоторый прогресс https://github.com/angular/angular/pull/7161 –

8

Использование глобальной переменной области действия (любой браузер)

index.html

<script> 
    var test; 
</script> 

на файле компонента

declare var test: any; 

После ngOnInit() этого файла компонента

Например

ngOnInit() { 
    test = this; 

} 

Теперь мы можем получить доступ каждые переменные и функции этого компонента, включая услуги (импортированные на этом компоненте).

Если вы хотите, чтобы предотвратить доступ к test для, скажем, производство, вы можете условно дать доступ к test как:

constructor(private _configService: ConfigService) { 
} 
ngOnInit() { 
    if(_configService.prod) { 
     test = this; 
    } 

} 

Здесь _configService означает экземпляр службы, используемой всеми компонентами и услуг.
Так переменные будут установлены как:

export class ConfigService { 
    prod = false; 
} 
+2

то, что мне нравится, это то, что использует самый простой способ ... слишком плохо, что у нас есть TS, это было бы еще проще – juanpastas

+1

Проблема с этим решением заключается в том, что вам нужно перекомпилировать код. Не очень хорошо подходит для отладки в процессе. Кроме того, компонент может иметь более одного экземпляра на странице. – Qwertiy

10

Использования ниже API к экземпляру компоненты доступа после выбора компонента в хроме с помощью осмотра.

ng.probe($0).componentInstance 
+1

не работает в угловых 5 –

Смежные вопросы