Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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:ng如果反应太晚_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript AngularJs:ng如果反应太晚

Javascript AngularJs:ng如果反应太晚,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我正在使用ui.router,并在我的主html文件中包含如下导航: <header ng-if-start="logedin()"></header> <navigation ng-if-end="logedin()"></navigation> 如果我在其中一个导航中单击注销,导航控制器将触发此功能: $rootScope.$on('$stateChangeStart', function(e, to) $scope.logout = fu

我正在使用ui.router,并在我的主html文件中包含如下导航:

<header ng-if-start="logedin()"></header>
<navigation ng-if-end="logedin()"></navigation>
如果我在其中一个导航中单击注销,导航控制器将触发此功能:

$rootScope.$on('$stateChangeStart', function(e, to)
$scope.logout = function() {
    store.remove('jwt');
    $state.go('login');
}
问题出在
$state.go之后导航没有隐藏,而是在刷新页面之后


我是否必须重新提交主索引模板/视图(以及如何重新提交)?或者我该如何解决这个问题呢?

所以我自己解决了。很抱歉,没有提供logedin()方法

问题是:

$scope.logedin = function() {
return $rootScope.logedin
}
$rootScope.logedin
是在
angular.module().run()
-函数中设置的

为了解决这个问题,我必须创建一个简单的getter/setter服务

angular.module('sample')
    .service('sharedLogedIn', function () {
        var property = true;

        return {
            getProperty: function () {
                return property;
            },
            setProperty: function(value) {
                property = value;
            }
        };
    });

很高兴知道问题已经解决了。可能发生的情况是您的值没有传播。。。我可能会这样做以排除故障:

<header ng-if="loggedinBool"></header>
<navigation ng-if="loggedinBool"></navigation>

1) 将loggedin()值分配给作用域模型或服务属性(最好是loggedinBool),并查看这些值是否在注销后传播,从而更改loggedinBool值


2) 如果这不起作用,请尝试在loggout中使用$broadcast/$emit并捕获它以更改loggedinBool的值。这将自动提供双向绑定,否则请尝试$scope.digest()或$scope.apply()方法以查看值是否传播。

ng if end
不需要
logedin()
更改
ng if end=“logedin”
只需
ng if end
即可解决您的问题。不幸的是,不需要:(您可以将logedin()方法?您是否尝试过将
ng if start=“logedin”
替换为
ng show=“logedin”
?另外,您确定
logedin
变为false吗?请尝试打印它,或使用扩展或开发工具检查角度范围。如果从dom中删除元素,同时销毁其范围,您在何处将
logedin
设置为false?ng。