2017-06-24 4 views
0

Ich habe ein Formular mit einem Texteingabefeld, das ich deaktivieren möchte, wenn der Benutzer einen asynchronen Anruf tätigt. Der erste und sehr grundlegende Ansatz lautet:Eingabefeld über Dienst deaktivieren: Angular2

<input type="text" disabled="someBooleanVar" /> 

und setzen Sie die boolesche Variable auf false. Aber da ich mache eine asynchrone mehrfach in dem Code ruft, will ich nicht

this.someBooleanVar = false 

mehrmals schreiben. Stattdessen habe ich einen Dienst, der eine Funktion enthält, und diese Funktion wird jedes Mal aufgerufen, wenn ein Async-Aufruf erfolgt. Also versuche ich, einen Booleschen var innerhalb dieses Service zu schreiben und schalten es innerhalb der Funktion dieses Dienstes und damit etwas tun, wie folgt aus:

<input type="text" disabled="serviceObj.someBooleanVar" /> 

Aber dieser Ansatz funktioniert nicht. Kann jemand darauf hinweisen, was hier vor sich geht?

+0

Haben Sie versucht, 'disabled = "serviceObj.someBooleanVar" zu ändern' auf '[disabled] = "serviceObj.someBooleanVar"' – awmleer

+0

@awmleer, ja habe ich versucht, hat nicht funktioniert. – Aiguo

+0

Haben Sie versucht, '[disabled] =" serviceObj.someBooleanVar "' zu setzen und die Dienstvariable auf 'true' zu ​​setzen? Die Variable muss "true" sein, um die Steuerung zu deaktivieren. – ConnorsFan

Antwort

0

Ein ähnliches Problem wurde auf GitHub gemeldet und es scheint, dass das Festlegen des Attributs beim Festlegen der Eigenschaft nicht funktionierte. Sie können dies tun:

<input type="text" [attr.disabled]="serviceObj.someBooleanVar ? 'disabled' : null" /> 
+0

gerade versucht dieser Ansatz, dies deaktiviert das Eingabetextfeld unabhängig vom booleschen Wert. – Aiguo

+0

Sie können versuchen mit einer String-Variablen ('" true "' oder '" false "'). Ich änderte meine Antwort, um eine Möglichkeit zu zeigen, dies zu tun. – ConnorsFan

+0

nein, auch die String-Werte funktionieren nicht. Aber etwas def falsch, ich inspiziert das Element " ... zeigt eindeutig die deaktivierte Eigenschaft ist falsch, immer noch ist die Eingabe-Eigenschaft deaktiviert – Aiguo

0

Sie haben soeben BehaviorSubject

Plnkr versuchen: https://plnkr.co/edit/ReasP8DWhzR6lCwjtmjO?p=preview

Service:

private status$ = new BehaviorSubject(true); 

public getStatus$(){ 
    return this.status$.asObservable(); 
} 

public setStatus$(status){ 
    this.status$.next(status); 
} 

Komponente:

this.status$ = _service.getStatus$(); 

HTML:

<input type="text" [disabled]="status$ | async" /> 
Verwandte Themen