2017-02-02 15 views
6

Posiadam aplikację Angular opartą na danych. Mam element przełączania, który przekazuję w stanie włączonym. Mój problem polega na tym, że dwukierunkowe powiązanie danych wydaje się nie działać, chyba że przekazałem w toggle boolean jako obiekt. Czy istnieje sposób, aby to zadziałało bez korzystania z EventEmitter lub przekazywania zmiennej jako obiektu. Ma to być składnik wielokrotnego użytku, a aplikacja jest silnie napędzana danymi, więc przekazywanie wartości jako obiektu nie jest opcją. Mój kod jest ....Angular2 Component @Input dwukierunkowe wiążące

toggle.html

<input type="checkbox" [(ngModel)]="toggled" [id]="toggleId" name="check"/> 

toggle.component.ts

import { Component, Input, EventEmitter, Output } from '@angular/core'; 

@Component({ 
    moduleId: module.id, 
    selector: 'toggle-switch', 
    templateUrl: 'toggle-switch.component.html', 
    styleUrls: ['toggle-switch.component.css'] 
}) 

export class ToggleSwitchComponent { 

    @Input() toggleId: string; 
    @Input() toggled: boolean; 

} 

parent.component.html

<toggle-switch toggleId="toggle-1" [(toggled)]="nongenericObject.toggled"></toggle-switch> 
+0

http://stackoverflow.com/documentation/angular2/8943/angular2-input-output#t=201702021650455443161 –

Odpowiedz

15

Dla [(toggled)]="..." pracować cię potrzebujesz:

@Input() toggled: boolean; 
    @Output() toggledChange: EventEmitter<boolean> = new EventEmitter<boolean>(); 

    changeValue() { 
    this.toggled = !toggled; 
    this.toggledChange.emit(this.toggled); 
    } 

Zobacz także Two-way binding

+0

On będzie bardzo rozczarowany, że „bez użycia EventEmitter lub przekazując zmienną jako obiekt "nie może być spełniony. To tak, jakby nie czytał podstawowej składni, o, hej, linku do podręcznika składni. – silentsod

+0

Zaimportował nawet 'EventEmitter'. Może nie tak źle, jak się spodziewasz ;-) –

+0

To faktycznie zadziałało dla mnie. Pierwotnie miałem to ustawione, aby używać emiter zdarzenia, który był powiązany z funkcją w elemencie nadrzędnym. To nie było zbyt wielorazowego użytku, więc dlaczego zadałem to pytanie, aby sprawdzić, czy istnieje sposób, aby to zrobić. Ta odpowiedź z jakiegoś powodu zmienia zmienną rodzica –

Powiązane problemy