0

我有多少UI-路由器狀態,並且在每個路由器中的控制器,I附加上下文對象指定當該狀態是活動的什麼被隱藏或在全球導航欄所示的rootScope 。更新rootScope可變

$rootScope.context = { showSearch: true, hideBack: true }; // defaults 

和每個控制器我有以下

function updateContext() { 
    $rootScope.context = undefined; 
    $rootScope = { showSearch: true, hideBack: true }; 
} 

,並在中堂模板,我有以下

<nav> 
    <nav-search ng-show="context.showSearch"></nav-search> 
    <nav-back ng-hide="context.hideBack"></nav-back> 
</nav> 

這工作好了,但問題是,當一個人導航到state A,然後導航到state B,當用戶返回到狀態A時,控制器不再被「執行」,因此上下文不會被更新到A的情況下

我想知道如何解決此問題。另外,如果可以在UI-Router狀態定義中添加這些信息,以便我可以在模板中訪問,那也可以。 謝謝:)

回答

0

的路要走,我建議,是正確地使用controller/$scope生命週期。在創建期間,我們設置值,在銷燬期間我們可以清理,或重置以前的值。所以,以顯示它的代碼,我們可以/應該做的:

.controller('MyController', ['$scope', '$rootScope', function($scope, $rootScope) { 
    // keep what was set 
    var oldValues = { 
     showSearch: $rootScope.showSearch || true, 
     hideBack: $rootScope.hideBack || true, 
    }; 
    ... 
    // do some magic 
    ... 
    // reset on state/view leave 
    $scope.$on('$destroy', function(){ 
     $rootScope.showSearch = oldValues.showSearch; 
     $rootScope.hideBack = oldValues.hideBack ; 
    }); 
}]) 

BTW:與$rootScope工作就像任何其他辛格爾頓工作。因此,也許 - 將所有從$ rootScope轉移到一些自定義StateHolder工廠/服務。