2015-09-21 111 views
0

我有一個Angular應用程序使用ui路由器與我的應用程序中定義的以下狀態。角ui路由器:孩子沒有得到父母狀態

$stateProvider 
    .state('classes', { 
    url: '/classes/:type', 
    templateUrl: 'classes.html', 
    controller: 'ClassesCtrl', 
    }) 
    .state('classes.detail', { 
    url: '/:id', 
    views: { 
     "@": { 
      templateUrl: 'class.html', 
      controller: 'ClassCtrl' 
     } 
    } 
    }); 

和我的控制器看起來像:

app.controller('ClassesCtrl', function($scope, $stateParams){ 
    $scope.foo = "bar"; 
}); 
app.controller('ClassCtrl', function($scope, $stateParams){ 
    console.log($scope.foo); 
}); 

正如你所看到的,class.detail隱藏通過針對根級別無名UI視圖的父視圖。我遇到的問題是孩子沒有繼承父母的範圍(我無法訪問class.detail中的$ scope.foo)。當我進入子狀態時,似乎父狀態被破壞,因爲如果我點擊回來,它必須重新加載所有數據。

如何有效隱藏父視圖但仍可訪問父數據?

+0

通過服務共享您的數據 – charlietfl

+0

我認爲嵌套視圖自動獲取父狀態?爲什麼它在我的情況下被破壞? – postelrich

+0

在父視圖中創建的$ scope應該可以通過子視圖no訪問? – postelrich

回答

1

從UI路由器文檔:

範圍由視圖層次繼承心中只有

記住,如果你的國家的意見是嵌套作用域屬性只繼承下來的狀態鏈。範圍屬性的繼承與你的狀態的嵌套和你的視圖嵌套(模板)無關。

嘛,你使用@來定義你的看法,但你的父母狀態被命名,所以你應該命名爲@classes

編輯:made this fiddle有關名稱解釋。

+0

好的,謝謝!如何隱藏嵌套視圖的父視圖? – postelrich

+0

在這種情況下,您可以將模板*添加到狀態*,而不是視圖。 – fixmycode

+0

所以你說我將不得不使用一個函數來確定templateUrl,如下所述:https://github.com/angular-ui/ui-router/wiki#templates?基本上就像'if(child state)child.html else parent.html'。 – postelrich

相關問題