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

为什么angularjs会两次调用函数`name()`?

从景曜
2023-03-14
问题内容

代码很简单:

<!doctype html>
<html ng-app="plunker" >
<head>
  <meta charset="utf-8">
  <title>AngularJS Plunker</title>
  <script>document.write("<base href=\"" + document.location + "\" />");</script>
  <link rel="stylesheet" href="style.css">
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js"></script>
</head>
<body ng-controller="MainCtrl">
  Hello {{name()}}!
</body>
</html>
<script>
var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.name= function() {
    console.log("---name---:" + new Date());
    return "Freewind";
  };
});

</script>

您会看到这里有一个name函数,我们只在体内调用它一次。但是在控制台中,它打印两次---name---:

---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间)
---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间)

您可以在此处观看现场演示:http :
//plnkr.co/edit/tb8RpnBJZaJ73V73QISC?p=preview

为什么该函数name()已被调用两次?


问题答案:

在AngularJS中,用大括号括起来的任何东西都是一个在摘要循环 中至少 被求值 一次
表达式。 __

AngularJS的工作方式是连续运行摘要循环,直到没有任何变化为止。这样可以确保视图是最新的。自调用函数以来,它运行一次以获取值,然后运行第二次以查看没有任何变化。在下一个摘要周期,它将至少再次运行。

name出于这个原因,通常只从模板中调用幂等方法(例如)是一个好主意。



 类似资料:
  • 编辑:由于代码剪贴不会重现错误-这里有一个指向github repo的链接:(代码远未完成) https://github.com/altruios/clicker-game 我现在已经在两台计算机上运行了它——这两台计算机都有相同的行为,而代码剪报并没有显示出来。 因此,我正在构建一个clicker游戏来学习react,我不明白为什么这段代码会以这种方式运行: 在主应用程序中,我有以下功能: 那

  • 问题内容: 我有一个想法,可能是因为我正在做一些样式设计来更改单选按钮,但是我不确定。我正在设置一个onClick事件,该事件两次调用了我的函数。我已删除它以确保它没有在其他地方被触发,并且onClick似乎是罪魁祸首。 我的功能目前仅是运输选项的简单控制台日志: 如果没有任何理由可以在这里看到为什么会发生这种情况,我可以发布其余代码,但是有很多方面,我认为这与之无关,但是我认为这是一个很好的起点

  • 正如我的类名所暗示的那样:如果我的类是迭代器的实例,我想测试一下。因此,我想知道,如果它只需要实现接口就可以这样做,似乎就足够了。 然而,当我通过JUNIT Test运行以下类时,我得到了以下控制台输出: 似乎类构造函数被调用了两次!但是我不知道第二次调用来自哪里。我已经测试了“if”参数的变体以排除有故障,例如 然而,它在所有3种情况下都被调用了。因此,我假设Unit Test首先尝试,需要为自

  • 问题内容: 我有一个像这样的有角度的应用程序: 带有相应的标记: 可见的输出是三个红色列表项,如预期的那样。但是该语句总共记录了6次到控制台,这意味着该视图被渲染了两次: 为什么? JSFiddle 问题答案: Angular 循环至少两次评估ngStyle属性- 一次获取值,一次检查其是否已更改。实际上,它一直在迭代直到值稳定为止,因此有可能多次检查该值。 这是一张图片来说明这一点: 这是一篇很

  • 我是新来的反应,什么来理解为什么console.log在渲染函数内部被调用两次? 如果我不从组件扩展,而是使用功能,控制台只打印一次

  • 问题内容: 我是angular js的新手,目前仍然遇到非常有线的bug。控制器中的函数在按路由加载视图调用时会运行两次。 http://jsfiddle.net/4gwG3/5/ 您将看到两次警报! 我的观点很简单 我的应用程序代码如下 问题答案: 首先检查您是否没有两次初始化Angular应用程序(通过使用 ng-app 自动进行初始化)。 一次,我有2个带有ng-app的html页面(一个用