我有2个控制器,loginCtrl和regCtrl,登录控制器$ scope.login里面有一个函数,我想从我的regCtrl里面调用这个函数。 我想要实现的是将用户重定向到他的主页,而无需在注册成功后登录。 loginCtrl中的登录功能
$scope.login=function(){
NProgress.start();
singInClicked = true;
var request =$http({
withCredentials: true,
method:"post",
url: "http://localhost:1337/auth/login",
data: {
user_identifier: $scope.user_identifier,
password: $scope.password
}
});
and the code of the regCtrl where i want to call this function is
request.success(
function(data){
$scope.response=data;
console.log("you have registered successfully");
//serviceStatus($http);
//**call $scope.login here**
NProgress.done();
});
我如何实现这一目标?
答案 0 :(得分:0)
一种方法是在您的reg控制器中注入$controller
服务,在创建$ controller时分配新范围,并使用该范围在loginCtrl上调用该函数。
app.controller('regCtrl', ['$scope', '$controller', function($scope, $controller) {
var loginCtrlVM = $scope.$new(); //Create a new scope
//var loginCtrlVM = $scope.$new(true); //Or even an isolated scope
$controller('loginCtrl', {$scope:loginCtrlVM }); //Instantiate loginCtrl passing in the scope
request.success(function(data){
...
console.log("you have registered successfully");
loginCtrlVM.login(); //<--- Now call login from your own scope
NProgress.done();
});
}]);
另一种方法是将逻辑抽象为单独的服务并在两个控制器中使用它,或者甚至在检查用户是否已登录的公共路由逻辑中(您的注册服务也可以通过调用执行登录操作)用于设置登录状态的登录服务)。这样您就不必在控制器中具有这种依赖性。你似乎在一个控制器中有NProgress.start();
而在另一个控制器中有NProgress.done();
(可能我没有看到整个代码),这使得它看起来很意大利面。