2014-05-16 39 views
0

我正在嘗試一些Angular,並且仍然有我的JQuery頭。當我嵌套指令時,如何訪問特定的父範圍?

我有一個div,它包含一個包含鏈接的下拉導航欄。當鏈接被點擊時,我想讓div離開並被一些ajaxed內容替換,並且我想標記爲在標誌範圍上設置。

一個已經創建了3個嵌套的指令,每一個都有它自己的範圍(範圍:TRUE):

  • flaggable,對於DIV,這AJAXes在內容上標記,當設置爲true。
  • 下拉式,對於導航,當摺疊狀態設置在範圍上時,摺疊並展開導航。
  • flagButton,這個設置標記在最近的包含可標記元素上。

我的問題,它可能是一個簡單的問題,是我如何從flagButton範圍到最近包含的旗標作用域,以便我可以在標記範圍中設置標記的參數。

我不想假設flagLink總是在下拉菜單中,或者總是有3個嵌套的作用域,可能會有更多。

在JQuery中,這將很簡單,我只是使用遍歷來獲取.closest('。flaggable')元素,並設置值。雖然這對我來說看起來並不是很有趣。我很可能會嘗試一些荒謬的事情。

謝謝!

+0

如何在視圖中組織這些指令的示例代碼會很有幫助。它看起來像有多個div與指令。每個div應該有一個控制器,並且這是bool的設置。這個布爾然後可以通過'scope'通過子指令來操作。 –

+0

我的印象是,如果我在子作用域上設置一個布爾值,它將被設置在該作用域而不是父作用域上,並且會在該上下文中隱藏父作用域。 – superluminary

+0

這是真的,但您不必直接在範圍上設置它,而是像'$ scope.flag = {set:false}'和'flagButton'範圍內'$ scope.flag.set = true' 。 – zeroflagL

回答

1

範圍相互繼承。沒有必要知道哪一個是最近的可標記範圍。

E.g.你可以在你flaggable範圍有這樣的:

$scope.setFlag = function(val) { ... }; 

在你flaggable範圍可以打電話$scope.setValue(val),因爲你總是可以肯定的是這個功能的存在。

另一種方法是爲flaggable設置一個控制器,並在flagButton指令的定義中指定require: '^flaggable'

+0

啊,是的,父範圍內有一個setter方法。我現在明白了!如果我剛剛設置了標記屬性,它會在子範圍中創建該屬性並掩蓋父項,但創建並調用setter允許將其設置在正確的範圍內。謝謝! – superluminary

+0

如果下拉菜單有隔離範圍,這將如何工作? – superluminary

+0

@superluminary這不會使'flagButton'有一個孤立的範圍,是嗎? – zeroflagL

相關問題