2015-11-30 52 views
0

如果我使用的是具有多個視圖的狀態,我該如何銷燬其中一個視圖的範圍?我嘗試以下,並沒有奏效:

<div ng-if='showFilters' ui-view="filters"></div> 
<div ui-view="tabledata"></div> 
<div ui-view="graph"></div> 

即使$ scope.showFilters設置爲false,在「過濾器」視圖範圍內仍然存在。我想知道ng-if是否只是在摧毀它的子範圍,但不知道ui-view的範圍。我很感激幫助。

+0

你可以提供更多的信息/可能是PLUNK嗎?當你說範圍仍然存在時,你的意思是什麼?無論是否銷燬子狀態父元素,在子狀態中設置的值都將保留在父狀態,除非被覆蓋。另外 - 你使用的是什麼版本的Angular和Ui-Router? –

+0

我現在會把一個笨蛋放在一起。而且我沒有引用在兒童狀態中設置的值...我同意你的觀點。我所說的是將ng-if設置爲false似乎不會破壞ui-view的範圍。我認爲這是一個與ng-if範圍無關的完全不同的範圍,所以我試圖找出將ng-if設置爲false將會破壞自身及其準過濾器範圍的方法。 Angular版本是1.2.27,Ui-Router是0.2.15 – jkossis

+0

plunkr似乎很難用我試圖展示的多個視圖...我猜我的問題的根源是,如何獲取ng - 如果影響由ui-view創建的範圍。如果ng-if爲false,它仍然不會破壞與「過濾器」視圖相關的範圍。我知道這是因爲它仍然從父節點的$廣播接收消息。 – jkossis

回答

0

我推薦使用視圖的層次,所以你可以輕易摧毀任何的「孩子」視圖範圍:

.state('parent', { 
     controller: "parentController as parent", 
     templateUrl: '../parent.html' 
    }) 
.state('child1', { 
     controller: "child1Controller", 
     templateUrl: '../child1.html' 
    }) 
.state('child2', { 
     controller: "child2Controller", 
     templateUrl: '../child2.html' 
    }) 

注意,您不必使用「parent.child2」(嵌套狀態),除非你想。最關鍵的是,孩子示波器會,只要他們是父母的HTML框架內繼承父範圍,如:

<div ui-view="parent"> 
    <div ui-view="child1"></div> 
    <div ui-view="child2"></div> 
</div> 
從孩子

然後,您可以簡單地引用類似{{parent.filters.filter1}},如果你需要銷燬範圍,您可以使用this.filters = undefined從父控制器執行此操作。