Angularjs 角度控制器构造函数:何时调用它?

Angularjs 角度控制器构造函数:何时调用它?,angularjs,Angularjs,我正在学习angular并有一个示例登录代码。此代码有一个构造函数,在调用时清除凭据。我的问题是:何时调用构造函数?是在初始化代码时还是在每次调用控制器上的方法时?我可能会把这与我的后端开发框架与DI的工作方式混淆,DI在初始化时只为我的控制器运行一次构造函数 作为后续问题,我需要一个注销函数还是构造函数足够好 这是我目前正在查看的代码: (function () { 'use strict'; angular .module('app') .controller('Login

我正在学习angular并有一个示例登录代码。此代码有一个构造函数,在调用时清除凭据。我的问题是:何时调用构造函数?是在初始化代码时还是在每次调用控制器上的方法时?我可能会把这与我的后端开发框架与DI的工作方式混淆,DI在初始化时只为我的控制器运行一次构造函数

作为后续问题,我需要一个注销函数还是构造函数足够好

这是我目前正在查看的代码:

(function () {
'use strict';

angular
    .module('app')
    .controller('LoginController', LoginController);

LoginController.$inject = ['$rootScope', '$location', 'AuthenticationService', 'FlashService'];
function LoginController($rootScope, $location, AuthenticationService, FlashService) {
    var vm = this;

    vm.login = login;

    (function initController() {
        // reset login status
        AuthenticationService.ClearCredentials();
    })();

    function login() {
        vm.dataLoading = true;
        var promise = AuthenticationService.Login(vm.username, vm.password)
            .then(function(userInfo){

                AuthenticationService.SetCredentials(userInfo);
                $location.path('/');

            }, function(failedReason) {
                FlashService.Error(failedReason);
                vm.dataLoading = false;
            });
    };

    function logout() {
        AuthenticationService.ClearCredentials();
        $location.path('/login');

    };
}

})();
  • 此代码基于Jason Watmore的博客-
  • 我已经阅读了这里的文档一次:

每次显示它所连接的视图或指令时,都会调用它。

当在html文档中找到和ng控制器时,或者当视图发生更改时,都会调用控制器

当一个控制器被调用所有函数时,它将被初始化,但不会被调用。因此,您可能需要调用注销函数来注销用户。但是重新呈现视图将注销用户,我认为这里不是这样。(我假设它是一个单视图模板)

这里是angular文档中的片段。。再检查一遍。 “”在Angular中,控制器由JavaScript构造函数定义,该构造函数用于扩展角度范围

当控制器通过ng控制器指令连接到DOM时,Angular将使用指定控制器的构造函数实例化一个新的控制器对象。将创建一个新的子作用域,并将其作为$scope作为可注入参数提供给控制器的构造函数


如果已使用控制器作为语法连接控制器,则控制器实例将分配给新作用域上的属性。“

不是单例。。。每次视图渲染时,每个useController构造函数的新实例都会调用。每次视图渲染时(模板、指令等)都会调用该实例,并且根据每次调用控制器时的代码(每次与控制器关联的模板渲染时)方法“initController”清除凭据,以便重新呈现将使您注销。此外,在LoginController中还有一个“logout()”函数……很抱歉,当我试图确定是否需要注销函数时,我添加了注销函数。