2016-03-27 80 views
0

我的問題最好用我的模板佈局來解釋。如何將變量從控制器傳遞到其範圍外的元素

<body> 

    <my-directive option1="myVar"></my-directive> 

    <ui-view></ui-view> 

</body> 

正如你所看到的,我有一個ui視圖,它將切換具有不同狀態的視圖/控制器。問題是這些狀態中只有一個狀態在其'my-directive'範圍內包含必要的邏輯配置變量。我怎樣才能將這些變量傳遞給指令?我試圖避免使用$ rootScope,但目前看來,它是最好的選擇。

+0

你的意思是指令應顯示只有當在特定的狀態或根據每個國家不會修改? – Daniel

+0

更具體的說,該指令是一個包含其他內容的登錄/註銷按鈕。 UI視圖有兩種狀態:一種爲用戶提供一個項目的顯示,而另一種狀態則允許用戶編輯項目。我只想讓登錄按鈕僅在視圖處於視圖狀態時纔可見。不管狀態如何,標題仍然需要顯示,但這就是爲什麼我沒有嵌套它。 –

+0

你可以在'directive'模板中,'ng-if =「$ state.current.name === state1」'等等...... – Daniel

回答

0

有幾種解決方案,這取決於你的配置變量:

如果您配置變量在系統啓動初始化並不會改變,你可以使用「常量」。

參見:https://docs.angularjs.org/api/auto/service/ $提供#常

如果你的配置變量可能會改變,你可以使用 「價值觀」

參見:https://docs.angularjs.org/api/auto/service/ $提供#值

我知道最後的辦法是使用服務

參見:https://docs.angularjs.org/api/auto/service/ $#提供服務

這篇文章解釋了這3個功能之間的區別:https://gist.github.com/demisx/9605099

編輯:「如何通過放入系統解決方案直接視圖」

一個可能的解決方案是初始化$ rootScope在這樣的運行功能:

angular.module('myApp') 
    .run(function ($rootScope, yourConfigurationVariables) { 
     $rootScope.aSpecificNameWichReferenceYourChoice = yourConfigurationVariables; 
    }); 

看到這個職位:Can I directly access module constant from HTML under AngularJS

+0

好極了,這似乎是方法,但文章沒有提及如何從你的模板中引用這些值。你碰巧知道嗎? –

+0

您是否在您的指令中定義了一個控制器? – Aliz

+0

他們聲明模塊寬嗎?是不是有一個模塊廣泛的對象,我可以參考像$ root?聲明控制器上的指令只是爲了得到這些值似乎對我來說有點不合適。 –

相關問題