Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS运行函数两次,尽管控制器只启动一次_Javascript_Angularjs - Fatal编程技术网

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');
    };
});