Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS重新加载控制器变量_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS重新加载控制器变量

Javascript AngularJS重新加载控制器变量,javascript,angularjs,Javascript,Angularjs,我会在用于导航栏的控制器中重新加载变量 我有每个视图的控制器。我使用一个控制器loginCtrl登录,在我登录之后,我将重新加载“rootController”中设置的var 我使用一个变量ng if在navbar中切换按钮登录和注销,但是这个变量(在rootController中)正在调用一个工厂函数 问题是变量设置一次,当我更改工厂值时,不会更改。解决方案是只重新加载rootController以重置var,搜索到internet我找到$route.reload()。 我在rootContr

我会在用于导航栏的控制器中重新加载变量

我有每个视图的控制器。我使用一个控制器loginCtrl登录,在我登录之后,我将重新加载“rootController”中设置的var

我使用一个变量ng if在navbar中切换按钮登录和注销,但是这个变量(在rootController中)正在调用一个工厂函数

问题是变量设置一次,当我更改工厂值时,不会更改。解决方案是只重新加载rootController以重置var,搜索到internet我找到$route.reload()。 我在rootController中创建了一个函数,我使用它是为了:

 $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如何使用来自工厂的变量?因此发出事件最终解决了您的问题;)干杯……)@法布里齐奥