$event
to samo wydarzenie.
Powiązanie zdarzenia (someevent)
pozwala powiązać zdarzenia DOM i zdarzenia EventEmitter
. Składnia jest dokładnie taka sama.
W przypadku zdarzeń DOM $event
to MouseEvent
, KeyboardEvent
lub wartość zdarzenia typu zdarzenia, którego słuchasz.
Dla EventEmitter
wydarzenia emitowana wartość jest dostępna jako $event
Zakładając ten przykład $event
nawiązuje do emitowanego przykład Ferrari
samochodu:
@Output() carChange:EventEmitter<Car> = new EventEmitter<Car>();
someMethod() {
this.carChange.emit(new Car({name: 'Ferrari'}));
}
Jeśli nie używać $event
jak w (click)="clicked()"
to zdarzenie wartość nie jest przekazywana.
Właściwie ile pamiętam nadal przekazywane w niektórych przeglądarkach ale nie we wszystkich (nie pamiętam jakie)
Ale jeśli używasz funkcji Angulars WebWorker, wówczas metoda nie może uzyskać zdarzenie wywołane lub emitowane, jeśli nie wymienia się go explicite.
Pod maską Angular używa paramu zwanego $ event i dosłownie kopiuje twój kod zwrotny "kliknięty" (zdarzenie $) '' ', więc zdarzenie $ jest zakodowane na sztywno do tej wartości. Wygląda na to '' self.parentView.context.clicked ($ event) '' '. Jeśli użyjesz niestandardowej nazwy zamiast $ event, powiedz '' 'event123''', Angular sprawdzi właściwość componentInstance.event123 i przekaże ją jako parametr - który prawdopodobnie będzie mieć wartość null/undefined. Zachowanie podobne do używania wbudowanych procedur obsługi HTML '' '' 'gdzie tylko dokładny tekst' '' event''' może być użyty – Ryan
@Brian Ogólnie nie przekazuj argumentu 'zdarzenie' jako części wartości atrybutu, ale moduł obsługi ma ten argument' funkcja clickHandler (zdarzenie) {..} '(jeśli jest to wymagane). Myślę, że OP powinien wiedzieć, jak wydarzenia działają w DOM, jak pokazano [tutaj] (https://github.com/shamhub/Front-end-programming/blob/master/4_Javascript_Programming/Topic8_DOM_Access/DOM_interface_hierarchy.png) – overexchange
@overexchange You muszą przekazać argument "zdarzenia" z atrybutu elementu '' 'onclick =" clickHandler (zdarzenie) "' '' lub zdarzenie nie zostanie przekazane do programu obsługi w pliku JS. http://plnkr.co/edit/9oOCztMuaq7rkowdHsGT?p=preview To bardzo ściśle wiąże się z zachowaniem Angulara w tym przypadku. – Ryan