通过服务禁用输入字段:Angular2
我有一个带有文本输入字段的表单,我想在用户进行异步调用时禁用该字段。第一种也是最基本的方法是:通过服务禁用输入字段:Angular2,angular,Angular,我有一个带有文本输入字段的表单,我想在用户进行异步调用时禁用该字段。第一种也是最基本的方法是: <input type="text" disabled="someBooleanVar" /> 多次。相反,我有一个包含函数的服务,每次异步调用时都会调用该函数。因此,我尝试在该服务中编写一个布尔变量,并在该服务的函数中切换它,从而执行如下操作: <input type="text" disabled="serviceObj.someBooleanVar" /> 但这种
<input type="text" disabled="someBooleanVar" />
多次。相反,我有一个包含函数的服务,每次异步调用时都会调用该函数。因此,我尝试在该服务中编写一个布尔变量,并在该服务的函数中切换它,从而执行如下操作:
<input type="text" disabled="serviceObj.someBooleanVar" />
但这种方法不起作用。有人能指出这里发生了什么吗?报告了一个类似的问题,似乎设置属性有效,而设置属性无效。您可以这样做:
<input type="text" [attr.disabled]="serviceObj.someBooleanVar ? 'disabled' : null" />
您可以尝试
行为主题
Plnkr:
服务:
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" />
您是否尝试将禁用的=“serviceObj.someBooleanVar”
更改为[disabled]=“serviceObj.someBooleanVar”
?@awmler,是的,我尝试了,没有成功。您是否尝试了[disabled]=“serviceObj.someBooleanVar”
并将服务变量设置为true
?变量必须是true
才能禁用控件。是的,我在每次异步调用时调用的服务函数内将其设置为true,@connorsfan是否将服务分配给组件?在组件的构造函数中,您是否只执行了构造函数(serviceObj)
?或者您是使用构造函数(public serviceObj)
分配它的吗?刚刚尝试过这种方法,这会禁用输入文本字段,而不管布尔值如何。您可以使用字符串变量(“true”
或“false”
)进行尝试。我修改了我的答案以显示一种方法。不,即使字符串值也不起作用。但是def出错了,我检查了元素“…清楚地显示disabled属性为false,输入属性仍然为disabled我再次修改了我的答案:-”谢谢,但这也不起作用。可能是角度方面的错误?
<input type="text" [disabled]="status$ | async" />