当前位置: 首页 > 知识库问答 >
问题:

角度NG-如果未按预期响应

段干开宇
2023-03-14

我有li元素,这些元素有一个绑定到复选框的ng-if语句。如果我物理地选中该复选框,ng-if将按预期响应。但是,如果我通过JavaScript选中或取消选中复选框,则复选框会按预期被选中或取消选中,但ng-if没有响应。这是正常工作吗?有没有更好的办法做到这一点?

下面是我的代码示例:“[]”=“<>”

HTML-第1部分

[li id=“HomeButton”ng-if=“HomeChecked!=true”onclick=“HomeChecked()”][a ng-href=“/”][img src=“images\neck01home.png”alt=“home”/][/a]

[li id=“TheBandButton”ng-if=“HomeChecked===true”onclick=“TheBandClicked()”][a ng-href=“/TheBand/”][img src=“images\neck01TheBand.png”alt=“The Band”/][/a]

HTML-第2部分

[label class=“MenuController”]Home2:[input class=“MenuController”id=“HomeCb”type=“checkbox”ng-model=“HomeChecked”ng-init=“HomeChecked=true”/][/label][br/]

[label class=“MenuController”]TheBand2:[input class=“MenuController”id=“BandCb”type=“checkbox”ng-model=“TheBandChecked”/][/labe][

[label class=“MenuController”]Gallery2:[input class=“MenuController”id=“GalleryCB”type=“checkbox”ng-model=“GalleryChecked”/][/label][br/]

JavaScript:

window.onload = function () {
}

function homeclicked() {
    document.getElementById('homecb').checked = true;
    document.getElementById('bandcb').checked = false;
    document.getElementById('gallerycb').checked = false;
}

function thebandclicked() {
    document.getElementById('homecb').checked = false;
    document.getElementById('bandcb').checked = true;
    document.getElementById('gallerycb').checked = false;
}

function galleryclicked() {
    document.getElementById('homecb').checked = false;
    document.getElementById('bandcb').checked = false;
    document.getElementById('gallerycb').checked = true
}

共有2个答案

宰父淳
2023-03-14

用适当的角度来做。

移动控制器中的函数。通过ng-click调用它们。让函数更改绑定到复选框的作用域变量。

<li id="homebutton" ng-if="homechecked != true" ng-click="homeclicked()">

同时在你的范围内...

$scope.homeclicked = function  {
    $scope.homechecked = true;
    $scope.thebandchecked = false;
    $scope.gallerychecked = false;
}

如果您真的真的想无视我的建议,继续使用您所拥有的东西,顺便说一句,这是非常糟糕的,您可以在函数中添加这一行:Angular.Element(document.getElementById('homecb')).$scope().$apply();这也是非常糟糕的,应该完全避免。

阎枫涟
2023-03-14

您这样做是错误的,ng-if没有触发,因为您只操作复选框的选中和未选中(使用javascript)而不是ng-model,所以不要尝试使用javascript来做这件事,而是在您的angular Controller上做。

控制器:

$scope.homeclicked = function() {
  $scope.homechecked = true;
  $scope.thebandchecked = false;
  $scope.gallerychecked = false;
};

ng-model on checkbox输入处理checked和unchecked,还有一个本机指令https://docs.angularjs.org/api/ng/directive/ngchecked用于处理checked和uncheck。

 类似资料:
  • 问题内容: 我对Angular.js范围有疑问。 首先,我是Angular的新手,我已经阅读了范围文档,并尽我所能来理解它。我觉得我的问题与此类似: ng-show不符合预期的绑定 但是,我的示例本质上更简单,我仍然不明白我所缺少的内容。 我的html非常简单,我有一个包装所有内容的控制器: 在其中,我有几个部分: 如您所见,我打算在将其应用于控制器时显示该部分。 我的应用程序逻辑如下: sect

  • 我使用的是角反应形式。在表单组的窗体控件中,我使用无法正常工作的正则表达式设置了验证器.模式,我不明白为什么。我已经验证了这个网站上的正则表达式 https://www.regextester.com/99144,以检查它,它工作正常 正则表达式(最少八个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符) 这是表单组 因此,当我键入“World@20”时,它验证为真,但当我开始键入“W

  • 我对Java很陌生,我正在努力学习。我写了少量的代码,但结果并不是我所期望的。看起来,无论我将体重设置为什么,它都不会显示“你的脂肪”上方的打印。我错过了什么? 我希望这段代码能够顺序检查每个else语句给出的int值,并打印出与int值相等的行。

  • 我有一个自定义案例类异常: 在我的 dao 中,我有一个从数据库中提取对象的方法,该方法返回 future,如果此将来失败,我将抛出我的 RecordNotFoundException 异常: 在另一个方法中,我调用getPerson方法,所以我将恢复添加到另一个方法中,当未来使用RecordNotFoundException失败时,我想返回一些东西: 因此,基本上,我希望当getPerson失败

  • 我有一个卡片列表组件,它应该显示卡片组件或卡片编辑组件的元素,具体取决于 上的卡片组件是真还是假。 卡片列表组件的模板如下所示: 我想将 ngIf 条件绑定到 wasEditClicked 布尔值。 我的卡组件(与上面显示的卡列表组件不同)如下所示:

  • 我试图使这个plunker Ui网格单元模板在大多数浏览器上都能工作,但在IE11中失败了。 指数html 数据json 状态emplate.html app.js 任何解释都非常感谢 使现代化 这适用于火狐,Safari和Chrome