Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 禁用AngularJS条件ng不会重新启用_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 禁用AngularJS条件ng不会重新启用

Javascript 禁用AngularJS条件ng不会重新启用,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,给定使用ng disabled=“truthy_scope_variable”有条件禁用的文本输入字段,AngularJS在范围变量第一次被伪造时禁用该字段,但在后续更改时不启用它。因此,该字段将保持禁用状态。我只能假设出了问题,但控制台日志是空的 truthy scope变量绑定到单选按钮模型,我甚至可以$watch更改它,但是输入字段的ng disabled没有按预期工作。我已经手动尝试调用$apply,但看起来Angular正在触发DOM更改 在控制器中: 单选按钮: 有条件禁用的输入

给定使用
ng disabled=“truthy_scope_variable”
有条件禁用的文本输入字段,AngularJS在范围变量第一次被伪造时禁用该字段,但在后续更改时不启用它。因此,该字段将保持禁用状态。我只能假设出了问题,但控制台日志是空的

truthy scope变量绑定到单选按钮模型,我甚至可以
$watch
更改它,但是输入字段的
ng disabled
没有按预期工作。我已经手动尝试调用
$apply
,但看起来Angular正在触发DOM更改

在控制器中: 单选按钮:

有条件禁用的输入字段:


如果我最初设置
$scope.new_account=false
,则该字段将被禁用,但从未重新启用。为什么会发生这种情况?

这是因为HTML属性总是字符串,所以在您的示例中,ngDisabled在两种情况下都对字符串求值(“true”或“false”)

要进行补救,应将模型与ngDisabled中的字符串值进行比较:

ng disabled=“新建账户=='false'”
。。。或使用复选框获取实际的布尔值:


是现有帐户吗
密码:

这两种解决方案都有一个解决方案。

有一种替代方案可供使用

ng值


自2016年3月起,绑定值将在Chrome和Firefox中更新ui,即使ng disabled为true,但在Safari中不是。在Safari中,当您禁用ng时,ui不会更新,尽管输入元素
value
属性将具有更新的值(更改后请选中
element.value


在Safari中,要使用
ng model
ng value
指令强制用户界面更新,您必须使用ng readonly而不是ng disabled。

您尝试过使用复选框而不是单选按钮吗。更整洁。看看这个,使用ng值是使用radio按钮更简单的方法。您的ng值建议也解决了这个问题!我希望我能将你的两个答案都标记为正确。在与AngularJS进行更多的合作之后,
ng value
似乎是更惯用的方式。如果你更新了你的答案,告诉我为什么它有效,我会把它标记为被接受的答案。
$scope.new_account = true
<input type="radio" ng-model="new_account" name="register"
 id="radio_new_account" value="true" />

<input type="radio" ng-model="new_account" name="register"
 id="radio_existing_account" value="false" />
<input type="password" ng-disabled="new_account" id="login-password"
 name="password" ng-model="password" />
 <input type="radio" ng-model="new_account" name="register"
 id="radio_new_account" ng-value="true" />

<input type="radio" ng-model="new_account" name="register"
 id="radio_existing_account" ng-value="false" />
      <input type="password" ng-disabled="new_account" id="login-password"
 name="password" ng-model="password" />