0

我有兩個指令,一個被限制的元素,另一個屬性多指令需要共享相同的專用範圍

<bar-foo special></bar-foo> 

現在的問題是,特殊指令需要在定義的東西barFoo指令的範圍。然而,barFoo指令有一個私人範圍

angular.module('App') 
.directive('barFoo', function() { 
    return { 
     restrict: 'E', 
     template: '<div><h1 ng-if="doit">Bar Foo</h1></div>', 
     scope: { /* private scope */ }, 
     .... 
    } 
}); 

doit值由特殊指令設置

angular.module('App') 
.directive('special', function() { 
    return { 
     restrict: 'A', 
     link: function (scope) { 
      scope.doit = false; 
     } 
    } 
}); 

的問題是,barFoo設有私人範圍,doit不會被添加到該範圍(但是$父母)。我想知道是否有可能讓特殊指令與barFoo指令具有相同的範圍?

我只能想到通過以下方法解決:1)添加額外的屬性

<bar-foo special doit="doit"></bar-foo> 

或2)改變barfoo

<div><h1 ng-if="$parent.doit">Bar Foo</h1></div> 

雖然這個偉大的工程模板HTML,這感覺有點像解決方法!

+1

任何時候當我遇到美元父母時,這表示我正在以某種不合意的方式做某件事。你似乎有同樣的感覺。我會親自爲第一個解決方案 – Blackunknown 2014-10-07 13:44:54

回答

3

您建議的解決方案不是一種解決方法,實際上是一種可以接受的方式來執行您在此處所需的操作。

AngularJS指令提供了一個很好的理由隔離範圍的設施。考慮到你想使用一個指令多個號碼。時間作爲一個複製的元素,你想確保範圍與所有其他範圍保持隔離。

除了2個解決方案,您的建議,可以有第三個解決方案,以及:

創建angularjs service保存您的doit變量。創建服務方法爲get()update()這個變量。 然後,您可以在這兩個指令中注入此service,並通過調用服務方法在指令中共享doit變量。這樣,無論您在指令中使用何種範圍,都可以確保您共享相同的doit變量。

請注意,angularjs service是單身人士,因此每次您在服務上調用get()或update()時,都會處理您的doit變量的同一個實例。

+0

+1提供服務建議;這真的是最好的解決方案。 – 2014-10-07 13:55:25

相關問題