调用函数时AngularJS无限循环调用?

时间:2018-06-19 10:27:10

标签: angularjs

标题说明了一切。我正在调用控制器中的一个函数,不知何故,客户端一直在反复发送请求。这是功能:

vm.user = null;
    vm.getUser=getUser;

    function getUser(id){
        $http({method:'GET', url: 'http://localhost:8080/api/user/'+id}).
            then(function(response){
                $scope.status = response.status;
                vm.user = response.data;
                return vm.user.login;
        }, function(response){
            $scope.status = response.status;
            vm.user = response.data || 'Request failed';
        });
    }

这是html文件中的调用

<span class="reviewUnitText">{{vm.getUser(vm.review.userId)}}</span>

(加载页面时,该函数只调用一次。无ng-repeat) 为什么一遍又一遍地执行?

2 个答案:

答案 0 :(得分:0)

使用for(i = 0; i < metaData.length; i++) { if(metaData[i].indexOf(search[valueCycle]) > -1) { cardMatch++; break; } } 。当您在ng-init内放置函数调用时,每次角度摘要循环运行时,此函数将被执行。这就是为什么要进行多次http请求。

通过使用{{}},该函数只会被调用一次。所以你可以从html中分配用户变量。

ng-init

答案 1 :(得分:0)

每当angularjs呈现页面时,它都会评估页面最终呈现中嵌入的所有表达式。

这意味着如果页面上的任何内容发生更改,则会在页面重绘时调用vm.getUser()函数,因为不相关的内容已更改。如果您的任何功能有副作用:例如vm.getUser()更新vm.user这将触发另一个页面呈现,以便再次调用vm.getUser()

避免在HTML中调用的任何表达式中产生副作用(ng-init除了那些仅在首次呈现元素时发生的表达式)。