AngularJs:ng-如果反应太迟了

时间:2015-12-04 12:56:49

标签: javascript angularjs angular-ui-router

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

<header ng-if-start="logedin()"></header>
<navigation ng-if-end="logedin()"></navigation>

logedin()布尔值将通过此函数中的angular.module().run()设置:

$rootScope.$on('$stateChangeStart', function(e, to)

如果我在其中一个导航中点击退出,导航控制器将触发此功能:

$scope.logout = function() {
    store.remove('jwt');
    $state.go('login');
}

问题是$state.go导航未隐藏,但刷新页面后。

我是否必须重新渲染主索引模板/视图(以及如何)?或者我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:4)

所以我自己解决了。很抱歉没有提供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;
            }
        };
    });

答案 1 :(得分:1)

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

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

1)将loggedin()值分配给范围模型或服务属性(最好)loggedinBool,并查看值是否在logout后传播,这会改变loggedinBool值。

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