Ng只显示互动的更新

Ng-show only updating on interaction

本文关键字:更新 显示 Ng      更新时间:2024-05-09

我在Angular的项目中一直在努力(对它来说很新),没有什么大问题,但遇到了一些我无法解决的问题。

我有一个允许用户创建帐户的表单。在整个表单中,我都会为表单可能包含错误的地方发送错误消息(例如,密码不够长等)。在除一个区域外的每个区域,模板都会按照我的预期进行更新,不仅在这个表单上,而且在项目中的其他表单上。

罪犯是这个家伙:

<div id="account-exists" ng-if="createAccountForm.$valid">
    <span class="error" 
        ng-show="error301" 
        translate>
        general.validations.account_exists
    </span>
</div>

对于ng-if,div被正确地插入到DOM中,子跨度保持不变,但它仍然包含ng-hide类。error301是一个布尔值,我根据服务器返回的数据在作用域上设置,使用开发工具可以看到它实际上正在更新到true。问题是,模板不会自动更新以显示错误。但是,如果单击,它将更新。

我认为$scope.$apply()可能会有所帮助,但它冻结了模板。检查DOM可以发现,它确实有帮助,因为它在幕后的行为正如预期的那样,控制器中的JS代码仍然运行,并且DOM得到了正确的更新。我的模板中有什么明显的遗漏吗?具体来说,为什么它会点击更新?有人在$scope.$apply()上经历过模板冻结吗?

肯定不能解决$scope.$apply()冻结模板引起的根本问题,但我至少能够通过直接使用CCD_ 8,以便在没有激活摘要循环的情况下移除未被移除的ng隐藏。

我更想知道为什么会发生这种情况,但现在,很高兴知道作为一种变通方法,这符合我的目的,而且只要切换错误的状态,我就可以在需要时简单地将元素和remove("ng-hide");add("ng-hide");作为目标。

如果使用对象,它可能会起作用。我无法解释为什么,但据我所知,这很有帮助。

ng-show="errors.error301" 

然后在控制器中

$scope.errors = {
   error301:false
}
...
...
...
$scope.errors.error301 = true;