2017-06-24 28 views
0

我有一個文本輸入字段的表單,我想在用戶進行異步調用時禁用它。第一個也是非常基本的方法是:通過服務禁用輸入字段:Angular2

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

並將boolean var設置爲false。但因爲我正在做一個異步調用的代碼多次,我不想寫

this.someBooleanVar = false 

多次。相反,我有一個包含一個函數的服務,每次進行異步調用時都會調用該函數。所以我想寫服務中的布爾VAR和切換它是服務功能內,因此這樣做如下:

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

但這種方法是行不通的。有人能指出這裏發生了什麼嗎?

+0

你有沒有試圖改變'禁用= 「serviceObj.someBooleanVar」''到[禁用] = 「serviceObj.someBooleanVar」' – awmleer

+0

@awmleer,是的,我試過了,沒有工作。 – Aiguo

+0

您是否試過'[disabled] =「serviceObj.someBooleanVar」'並將服務變量設置爲'true'?該變量必須爲「true」才能禁用該控件。 – ConnorsFan

回答

0

GitHub上報告了類似的問題,並且似乎在設置屬性時設置屬性沒有工作。你可以這樣做:

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

只是嘗試了這種方法,無論布爾值如何,都會禁用輸入文本字段。 – Aiguo

+0

你可以嘗試一個字符串變量('「true」'或'「false」')。我修改了我的答案,以顯示一種做法。 – ConnorsFan

+0

連字符串值都不起作用。但是,一些錯誤的,我檢查了元素「 ...清楚地顯示禁用屬性爲false,仍然輸入屬性被禁用 – Aiguo

0

你可以只是嘗試BehaviorSubject

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

服務:

private status$ = new BehaviorSubject(true); 

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

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

組件:

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

HTML:

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