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來向下或向上傳播數據,這取決於你的需要。 –