Javascript 方法多次激发

Javascript 方法多次激发,javascript,angularjs,Javascript,Angularjs,我在我的控制器中调用了一个方法,但当我想记录object.name时,它会触发两次。 当我想记录整个对象时,它会启动6次。你知道为什么吗 (function(){ var app = angular.module('portfolio', ['ngRoute' ]); app.controller('ReferenceController', function(){ this.product = references; this.arrayL

我在我的控制器中调用了一个方法,但当我想记录object.name时,它会触发两次。 当我想记录整个对象时,它会启动6次。你知道为什么吗

(function(){

    var app = angular.module('portfolio', ['ngRoute' ]);

    app.controller('ReferenceController', function(){

        this.product = references;
        this.arrayLength = this.product.length;

        // @TODO
        this.getReferences = function(){ 

            for(var i = 0; i < this.arrayLength; i++){
                console.log(this.product[i].name);
            }

             return false;

        };

    });

    var references = [

        {
            name: "ThisIsName",
            imgUrl: "This Is Image URL",
            pageUrl: "This Is Page URL",
            tags: [
                {tag: "web"}
            ]
        }

    ];

})();
我这样称呼它

<div ng-controller='ReferenceController as reference'>
      {{reference.getReferences()}}
</div>

不确定你具体要求什么,但

  for(var i = 0; i < this.arrayLength; i++){
                console.log(this.product[i].name);
            }

本质上意味着它将从头到尾运行整个数组,对于每个值,它将打印到控制台一次。因此,它会为数组中的多个值打印多次

这是由Angular的双向数据绑定造成的,该绑定使用了$digest循环,正如它所称的那样。可以将其视为允许Angular检查值是否已更新。 如果只想运行该函数一次,请在控制器内部调用它


你可以。

angular有一个被称为摘要循环的循环。它可以运行页面所需的任意次数。@DanielA.White A。如何防止这种循环?在页面完全加载后,我将在index.html的末尾加载这个JS文件。是否要在页面中显示引用名称?当前,名称将输出到控制台。@runTarm不知道输出到哪里。我只想做一次!好的,然后删除html中的reference.getReferences调用。然后调用控制器底部的this.getReferences。我只想在var引用中打印所有内容一次。嗯,也许你不应该在数组中有一个数组标记:[{tag:web}]?我不关心对象结构。例如,在php中,我会这样做:foreach$references作为$object{echo$object.name;},它会打印references数组中每个对象的名称。一次,而不是多次。