// #docregion import 'package:angular2/core.dart'; import 'logger_service.dart'; import 'spy_directive.dart'; @Component( selector: 'my-counter', template: '''
Counter = {{counter}}
-- Counter Change Log --
{{chg}}
''', styles: const [ '.counter {background: LightYellow; padding: 8px; margin-top: 8px}' ], directives: const [Spy]) class MyCounter implements OnChanges { @Input() num counter; List changeLog = []; ngOnChanges(Map changes) { // Empty the changeLog whenever counter goes to zero // hint: this is a way to respond programmatically to external value changes. if (this.counter == 0) { changeLog.clear(); } // A change to `counter` is the only change we care about SimpleChange prop = changes['counter']; var prev = prop.isFirstChange() ? "{}" : prop.previousValue; changeLog.add( 'counter: currentValue = ${prop.currentValue}, previousValue = $prev'); } } @Component( selector: 'counter-parent', template: '''

Counter Spy

-- Spy Lifecycle Hook Log --

{{msg}}
''', styles: const [ '.parent {background: gold; padding: 10px; margin:100px 8px;}' ], directives: const [MyCounter], providers: const [LoggerService]) class CounterParentComponent { num value; List spyLog = []; LoggerService _logger; CounterParentComponent(this._logger) { spyLog = _logger.logs; reset(); } updateCounter() => value += 1; reset() { _logger.log('-- reset --'); value = 0; } }