0

我正在使用angular-ui/ui-router,并且具有隔离范围定义为在状态更改时呈现的指令/组件。将父范围变量传递给ui-view组件

$stateProvider 
    .state('about', { 
     url: '/about', 
     template: '<about></about>' 
    }) 
    .state('blog', { 
     url: '/blog', 
     template: '<blog></blog>' 
    }) 

我的主页是与

app.directive('main', function() { 
    return { 
    ... 
    template: "<div><header></header><div ui-view></div></div>", 
    controller: [..., function(...) { 
     $scope.user = // $http load user 
    }] 
); 

当导航到不同的状态,我希望用户传递给所有用户界面视图指示在其控制器的所有权限加载用户指令/组件。但是我无法找到一个很好的方式来实现这一没有resolve将加载在每次状态变化的用户或使用$rootScope

我正在寻找类似于以下,其中user是什么来自父范围的那个。

$stateProvider 
    .state('about', { 
     url: '/about', 
     template: '<about user="user"></about>' 
    }) 
    .state('blog', { 
     url: '/blog', 
     template: '<blog user="user"></blog>' 
    }) 

任何想法如何做到这一点?

控制器
+0

哪里的客户端输入用户名? '$ http'权限的获取可以被重构为一个服务吗? – georgeawg

回答

1

,您可以将用户分配到$ rootScope,像$rootScope.user = sth,那么你可以添加是否为控制每个状态的URL来获取用户喜欢$scope.user= $rootScope.user,或通过rootScope用户作为参数。

+0

我想这是一个有效的解决方案(upvoted)。不过,我正在考虑将我们的Angular 1.x应用程序转换为Angular 2.x,并尝试避免使用$ rootScope。 – Will

0

你需要使用$ rootscope在控制器这样

$rootScope.user = sth; 

,你可以得到用户这样

$scope.user= $rootScope.user; 
+1

正如@斯蒂芬妮的回答中所评论的,我不想使用$ rootScope – Will

+0

如果你不想使用$ rootscope,那么你可以使用$ broadcast或$ emit来向下或向上传播数据,这取决于你的需要。 –