Javascript AngularJS重新加载控制器变量
我会在用于导航栏的控制器中重新加载变量 我有每个视图的控制器。我使用一个控制器loginCtrl登录,在我登录之后,我将重新加载“rootController”中设置的var 我使用一个变量ng if在navbar中切换按钮登录和注销,但是这个变量(在rootController中)正在调用一个工厂函数 问题是变量设置一次,当我更改工厂值时,不会更改。解决方案是只重新加载rootController以重置var,搜索到internet我找到$route.reload()。 我在rootController中创建了一个函数,我使用它是为了:Javascript AngularJS重新加载控制器变量,javascript,angularjs,Javascript,Angularjs,我会在用于导航栏的控制器中重新加载变量 我有每个视图的控制器。我使用一个控制器loginCtrl登录,在我登录之后,我将重新加载“rootController”中设置的var 我使用一个变量ng if在navbar中切换按钮登录和注销,但是这个变量(在rootController中)正在调用一个工厂函数 问题是变量设置一次,当我更改工厂值时,不会更改。解决方案是只重新加载rootController以重置var,搜索到internet我找到$route.reload()。 我在rootContr
$rootScope.reload = function(){ $timeout(function () {
$route.reload();
}, 0);
};
但当我调用另一个控制器时,应用程序将无限加载
如何解决
编辑:
一切正常,但当我在工厂中更新isLogged变量时,应用程序不会在AppCtrl中更新$scope.isLogged。解决方案是重新加载AppCtrl以调用UserLogged.get()并用新值重置$scope.isLogged
已解决:
@瓦卢里,谢谢
// App control
$scope.$on('loginLogout',function(){
$scope.isLogged = UserLogged.isLogged();
$scope.userLogged = UserLogged.get();
});
// loginCtrl
$http.get(..).sucess(function(data){
UserLogged.set(data);
$scope.$emit('loginLogout');
})
您可以尝试发出两个用于登录和注销的事件,通过这两个事件,您可以更新rootController中的变量,而无需刷新它 在导航栏中
<button ng-if="!isLoggedIn">Login</button>
<button ng-if="isLoggedIn">Logout</button>
尝试从登录控制器发出“登录”事件
//on successful login, trigger below event
$scope.$emit('login',true);
//on successful logout, trigger below event
$scope.$emit('logout',false);
和在注销控制器中
//on successful login, trigger below event
$scope.$emit('login',true);
//on successful logout, trigger below event
$scope.$emit('logout',false);
注意:上述方法仅在mainController是其他控制器的父控制器时有效,否则请尝试在$rootScope而不是$scope上发出事件是否可以发布代码表单loginCtrl用于在工厂中设置变量,发布完整的工厂代码,并发布rootCtrl如何使用来自工厂的变量?因此发出事件最终解决了您的问题;)干杯……)@法布里齐奥