Javascript 如何在angularjs中调用控制器内部的函数

Javascript 如何在angularjs中调用控制器内部的函数,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我在登录控制器中有两个函数,两个函数都是 实现登录目的, 在这个控制器中!范围.isLoggedIn条件满足,需要检查内部条件是否满足。 我需要在应用程序中永久登录,以便在本地会话存储中存储用户ID和密码凭据 每当localStorage中有可用的值时,我需要执行automaticLogin函数, 我检查了localStorage数据是否可用,是否处于if状态 如果用户ID和密码在localStorage中都可用,我需要执行automaticLoginUser函数 如果没有,则无需执行autom

我在登录控制器中有两个函数,两个函数都是 实现登录目的, 在这个控制器中!范围.isLoggedIn条件满足,需要检查内部条件是否满足。 我需要在应用程序中永久登录,以便在本地会话存储中存储用户ID和密码凭据 每当localStorage中有可用的值时,我需要执行automaticLogin函数, 我检查了localStorage数据是否可用,是否处于if状态 如果用户ID和密码在localStorage中都可用,我需要执行automaticLoginUser函数 如果没有,则无需执行automaticLogin功能 每当我试图执行automaticLoginUser函数时,就会出现错误 TypeError:scope.automaticLoginUser不是函数错误。 提前谢谢你

  app.controller('LoginCtrl', ['$scope',
        'userService', '$state', '$rootScope','BackendService', 'CartService',

        function(scope, userService, $state, rootScope, BackendService, CartService) {
            scope.user = {};
            scope.isLoggedIn = false;
            scope.userId = CartService.getuserId();
            scope.userPassword = CartService.getuserPassword();
            if (!scope.isLoggedIn) {
                console.log('in side isLoggedIn');
                if (scope.userId !== undefined && scope.userPassword !== undefined) {
                    var loginId = scope.userId;
                    var password = scope.userPassword;
                    scope.user.loginId = loginId;
                    scope.user.password = password;
                    console.log('after user' + scope.user);
                    var user = scope.user;
                    scope.automaticLoginuser(user);
                }
                scope.automaticLoginuser = function(user) {
                    alert("Inside automaticLoginuser");
                    CartService.saveuserId(scope.user.loginId);
                    CartService.saveuserPassword(scope.user.password);

                    userService.loginuser(user)
                        .then(function(response) {
                            scope.userUuid = response.data.userUuid;
                            userService.setuserUuid(scope.userUuid);

                            if (response.data.status === 'success') {
                                CartService.saveFuuid(scope.fuuid);
                                $state.go("app.userHome");
                            } else {
                                $state.go("app.login");
                            }
                        });
                };

                scope.loginuser = function(user) {
                    CartService.saveuserId(scope.user.loginId);
                    CartService.saveuserPassword(scope.user.password);

                    userService.loginuser(user)
                        .then(function(response) {
                            scope.userUuid = response.data.userUuid;
                            userService.setuserUuid(scope.userUuid);

                            if (response.data.status === 'success') {
                                $state.go("app.userHome");
                            } else {
                                $state.go("app.login");

                            }
                        });
                };
            }
        ]);

scope.automaticLoginuser
是在if语句之后定义的。首先要做的是在控制器的更高层定义方法。

作用域。在if语句之后定义automaticLoginuser
。首先要做的是在控制器的更高层定义方法。

首先,在前端的任何位置(包括本地会话存储)保存用户用户名和密码是多么不明智。希望你能以某种方式解决它

function automaticLoginuser(user) {
    alert("Inside automaticLoginuser");
    CartService.saveuserId(scope.user.loginId);
    CartService.saveuserPassword(scope.user.password);

    userService.loginuser(user)
        .then(function(response) {
            scope.userUuid = response.data.userUuid;
            userService.setuserUuid(scope.userUuid);

            if (response.data.status === 'success') {
                CartService.saveFuuid(scope.fuuid);
                $state.go("app.userHome");
            } else {
                $state.go("app.login");
            }
        });
};
其次,您面临的问题是,您试图在声明范围之前在控制器内调用范围。无论如何,这是不必要的,因为$scope是一个实例,angular使用控制器实例化它,以便您能够从DOM调用它

因此,正确的做法是正常定义函数,因为您只计划在控制器中调用它

function automaticLoginuser(user) {
    alert("Inside automaticLoginuser");
    CartService.saveuserId(scope.user.loginId);
    CartService.saveuserPassword(scope.user.password);

    userService.loginuser(user)
        .then(function(response) {
            scope.userUuid = response.data.userUuid;
            userService.setuserUuid(scope.userUuid);

            if (response.data.status === 'success') {
                CartService.saveFuuid(scope.fuuid);
                $state.go("app.userHome");
            } else {
                $state.go("app.login");
            }
        });
};
然后正常地打电话

automaticLoginuser(user);

首先,我不能夸大将用户用户名和密码保存在前端的任何位置(包括本地会话存储)是多么不明智。希望你能以某种方式解决它

其次,您面临的问题是,您试图在声明范围之前在控制器内调用范围。无论如何,这是不必要的,因为$scope是一个实例,angular使用控制器实例化它,以便您能够从DOM调用它

因此,正确的做法是正常定义函数,因为您只计划在控制器中调用它

function automaticLoginuser(user) {
    alert("Inside automaticLoginuser");
    CartService.saveuserId(scope.user.loginId);
    CartService.saveuserPassword(scope.user.password);

    userService.loginuser(user)
        .then(function(response) {
            scope.userUuid = response.data.userUuid;
            userService.setuserUuid(scope.userUuid);

            if (response.data.status === 'success') {
                CartService.saveFuuid(scope.fuuid);
                $state.go("app.userHome");
            } else {
                $state.go("app.login");
            }
        });
};
然后正常地打电话

automaticLoginuser(user);

您只需重新排序功能即可

var-app=angular.module(“myApp”,[]);
应用程序控制器('LoginCtrl',['$scope',
/*“userService”、“$state”、“$rootScope”、“BackendService”、“CartService”*/
函数(scope/*,userService,$state,rootScope,BackendService,CartService*/){
scope.automaticLoginuser=函数(用户){
警报(“内部自动登录用户”);
/*CartService.saveuserId(scope.user.loginId);
CartService.saveuserPassword(scope.user.password);
userService.loginuser(用户)
.然后(功能(响应){
scope.userUuid=response.data.userUuid;
userService.setuserUuid(scope.userUuid);
如果(response.data.status==='success'){
CartService.saveFuuid(scope.fuuid);
$state.go(“app.userHome”);
}否则{
$state.go(“app.login”);
}
});*/
};
scope.loginuser=函数(用户){
/*CartService.saveuserId(scope.user.loginId);
CartService.saveuserPassword(scope.user.password);
userService.loginuser(用户)
.然后(功能(响应){
scope.userUuid=response.data.userUuid;
userService.setuserUuid(scope.userUuid);
如果(response.data.status==='success'){
$state.go(“app.userHome”);
}否则{
$state.go(“app.login”);
}
});*/
};
scope.user={};
scope.isLoggedIn=false;
scope.userId='admin';//CartService.getuserId();
scope.userPassword='admin';//CartService.getuserPassword();
如果(!scope.isLoggedIn){
console.log('in side isLoggedIn');
if(scope.userId!==未定义&&scope.userPassword!==未定义){
var loginId=scope.userId;
var password=scope.userPassword;
scope.user.loginId=loginId;
scope.user.password=密码;
console.log('user'之后+scope.user);
var user=scope.user;
范围.自动登录用户(用户);
}
}
}
]);

您只需重新排序功能即可

var-app=angular.module(“myApp”,[]);
应用程序控制器('LoginCtrl',['$scope',
/*“userService”、“$state”、“$rootScope”、“BackendService”、“CartService”*/
函数(scope/*,userService,$state,rootScope,BackendService,CartService*/){
scope.automaticLoginuser=函数(用户){
警报(“内部自动登录用户”);
/*CartService.saveuserId(scope.user.loginId);
CartService.saveuserPassword(scope.user.password);
userService.loginuser(用户)
.然后(功能(响应){
scope.userUuid=response.data.userUuid;
userService.setuserUuid(scope.userUuid);
如果(response.data.status==='success'){
CartService.saveFuuid(scope.fuuid);
$state.go(“app.userHome”);
}否则{
$state.go(“app.login”);
}
});*/
};
scope.loginuser=函数(用户){
/*CartService.saveuserId(scope.user.loginId);
CartService.saveuserPassword(scope.user.password);
userService.loginuser(用户)
.然后(功能(响应){
scope.userUuid=response.data.userUuid;
userService.setuserUuid(scope.userUuid);
如果(response.data.status==='success'){
$state.go(“app.userHome”);
}否则{
$state.go(“app.login”);
}
});*/
};
scope.user={};
scope.isLoggedIn=false;
scope.userId='admi