当前位置: 首页 > 面试题库 >

AngularJS中的每个模型更改后,是否都会在ng-show中触发表达式?

杜茂
2023-03-14
问题内容

我有这个简单的控制器标记

<div ng-controller="TestCtrl" ng-show="isVisible()">
    <input type="text" ng-model="smth"/><br>
    <span>{{smth}}</span>
</div>

和控制器本身

function TestCtrl($scope, $log)
{
    $scope.smth = 'smth';

    $scope.isVisible = function(){
        $log.log('isVisible is running');

        return true;
    }
}

为什么每次对模型进行少量更改(例如,在文本框内更改一个字母)后,就可以isVisible is running在控制台中看到?在这种情况下这不是问题,但我认为它将在大型应用程序中使用。我可以避免吗?


问题答案:

这是正常的,因为这是AngularJS如何完成其​​“魔术”的必不可少的步骤。

有多种技术可以确保您不会遇到性能问题,但是不会,通常,您不能排除那些表达式的计算。



 类似资料:
  • 问题内容: 我正在尝试在应用程序中使用AngularJS,并在某种程度上取得了成功。 我能够获取数据并将其显示给用户。我有一个按钮,我想通过该按钮发布DELETE请求。下面是我的代码。 这是获取信息并将其显示给用户的功能。 数据已获取并正确显示。 但是,单击删除按钮后,不会触发其中的代码。在GoogleChrome浏览器的开发人员工具中,我可以看到为代码生成了有效值,但未触发代码。从我尝试去掉花括

  • 问题内容: 我想这样做: 但表达式的计算结果始终为。 我不想在上定义特殊功能。 问题答案: 如果需要运行任意JavaScript代码,请使用控制器方法,或者可以定义返回true或false的过滤器。 我刚刚进行了测试(应该首先进行了测试),并且像预期的那样工作。

  • 问题内容: 当我从纯JavaScript更改输入元素的值时,则不会更新角度模型。有什么方法可以通过在更改后手动触发一些事件来触发更新吗? 完整的示例可以在plunkr上找到。单击按钮后,我希望会以某种方式更新。有办法吗? 问题答案: 您不应该这样做(除非用于 测试 ,但即使如此,也请考虑量角器)。以这种方式与angular交互是一个坏主意。但是,如果必须,这是您的操作方法。 一种不同的中间方式是

  • 问题内容: 所以…例如,我正在尝试将一个电子邮件“模板”引入iframe中,作为angularjs应用程序内用户的“预览”。iframe位于控制器区域内(我们称其为MainCtrl)。然后,用户将能够使用MainCtrl内提供的表单元素基于其输入来更新预览。举例来说,假设我们将模板拉入iframe的过程如下所示: 因此,在我们的index.html(angularjs应用)中,我们将具有绑定到{{

  • 问题内容: JS小提琴 问题: 我的页面中有一个SELECT元素,其中填充了。它还具有一个具有默认值的。 当我更改值时,可以适应。但是下拉列表在启动时显示了一个空插槽,应该在其中选择了具有默认值的项目。 码 使用JS: 问题答案: 您可以在选项元素上使用ng- selected 指令。它表达了如果诚实将设置所选属性。 在这种情况下: 演示版

  • 我正在执行多个ajax调用,我想在显示表单之前完成所有这些调用。如果有错误,我想停止处理,只显示遇到的第一个错误。我谷歌了很多文章,包括StackOverflow上的文章,这些文章展示了如何链接当时的语句。但是似乎我必须给每个语句都附加一个捕获,否则只捕获最后一个语句中的错误。在本例中,Lookup是一个返回promise的异步调用,ShowError处理错误: 假设至少有一个错误,是否有任何方法