Javascript AngularJS运行函数两次,尽管控制器只启动一次
我在谷歌上搜索了一段时间,但似乎找不到我的函数被执行两次的原因。我已经将代码简化为几行,但仍然无法理解。我在另一个应用程序上也做过同样的事情,但我不记得有过同样的问题。也许你们可以帮我Javascript AngularJS运行函数两次,尽管控制器只启动一次,javascript,angularjs,Javascript,Angularjs,我在谷歌上搜索了一段时间,但似乎找不到我的函数被执行两次的原因。我已经将代码简化为几行,但仍然无法理解。我在另一个应用程序上也做过同样的事情,但我不记得有过同样的问题。也许你们可以帮我 angular.module('indexApp',[]).controller('indexController',function($scope){ console.log(“init”); $scope.somefunc=函数(pEpochTime){ 警报(“为什么执行两次?”); 返回“asdf”;
angular.module('indexApp',[]).controller('indexController',function($scope){
console.log(“init”);
$scope.somefunc=函数(pEpochTime){
警报(“为什么执行两次?”);
返回“asdf”;
};
});代码>
{{somefunc('asdf')}
当您将表达式与函数绑定,而不是与变量绑定时,Angular将使用每个$digest循环执行表达式
新增maurycy评论:
摘要运行两次,第一次由变量观察器运行,第二次检查第一次运行是否更改了另一个变量,因此默认情况下,最少运行2次摘要,最多运行10次
看看这个
我添加了与表达式无关的ng click事件,但当ng click启动摘要循环时,它会再次启动函数
在此处阅读有关$watch的更多信息:
$rootScope.Scope
如果希望在调用$digest时收到通知,可以
在没有侦听器的情况下注册watchExpression函数。(做好准备
多次调用watchExpression,因为它将执行
如果检测到更改,则在单个$digest循环中多次。)
可能是因为在使用ng controller=“indexController as indexCtrl”语法时,不应该像.controller那样定义控制器,而应该将其定义为一个普通函数。控制器不会被启动两次吗?console.log()只运行一次。请在视图中使用indexCtrl.somefunc('asdf')。看看这是否会使问题根本无法解决。我已经试过了。我想这是有道理的,尽管我不明白背后的原因。然而,人们如何解决这个问题呢?非常感谢你的帮助,米莎。对这两篇摘要做一点解释。这与您所说的rootScope和controller范围不同。摘要运行两次,第一次由变量观察器运行,第二次检查第一次运行是否更改了另一个变量,因此您至少可以运行2次摘要,最多可以运行10次default@MarianneMarkwardt若要绑定函数,请绑定一个变量,它将运行一次。@maurycy您是对的,我尝试再添加一个控制器,但它仍然运行两次。Tnx,我会更新答案。我自己想出来的,但觉得这有点违反直觉。在我看来,这更像是一种黑客行为,而不是一个实际的解决方案。非常感谢,米莎。
angular.module('indexApp', []).controller('indexController', function ($scope) {
console.log("init");
$scope.somefunc = function (pEpochTime) {
alert("Why does this execute twice?");
return "asdf";
};
$scope.do = function(){
console.log('doing');
};
});