角度服务功能被多次调用

Ren*_*407 2 angularjs

我有一个多次调用的角度服务功能.在index.html页面中我有以下行:

<li><i class="pull-right"></i><br/>{{appCtrl.service.getCurrentUser()}}&nbsp;</li>
Run Code Online (Sandbox Code Playgroud)

在应用程序控制器中,我设置了变量

appCtrl.controller('AppController', function ($state, securityService, $log) {

        $log.info('App controller');

        var appCtrl = this;
        appCtrl.service = securityService;
});
Run Code Online (Sandbox Code Playgroud)

在我的服务中,我公开了这个功能

   login.factory('securityService', function ($window, $log) {

    var currentUser;

    return {
        setCurrentUser: function (user) {
            currentUser = user;
            $window.sessionStorage.setItem('User', JSON.stringify(currentUser));
        },
        getCurrentUser: function () {
            $log.info('Calling current user');
            if (!currentUser) {
                var storedObject = $window.sessionStorage.getItem('User');
                currentUser = JSON.parse(storedObject);
            }
            return currentUser;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

getCurrentUser当应用程序启动或页面刷新完成时,函数中的以下行会被多次调用.

$log.info('Calling current user');
Run Code Online (Sandbox Code Playgroud)

控制器只被调用一次,我通过查看来监控它 $log.info('App controller');

是作为脏检查过程的一部分被调用还是我做错了什么?

uda*_*mik 5

Angular在每个摘要周期调用你的函数,你可以在函数内部设置断点并检查它.如果您使用的是1.3版本,那么请查看一次性绑定功能.如果没有,则调用控制器内的服务并将视图绑定到某个范围变量:

$scope.currentUser = securityService.getCurrentUser();
Run Code Online (Sandbox Code Playgroud)

并且内部视图绑定到范围变量:

{{currentUser}}
Run Code Online (Sandbox Code Playgroud)