2014-09-01 60 views
3

以外納克元件我沒有經驗的具有角。使用納克控制器

我使用的角度來創建一系列網頁上的嵌套的div(一種形式)的。頂部div有ng-controller="controllername"作爲屬性。在嵌套divs是一個與ng-show="showvar"作爲屬性的div。

看起來像這樣。

<div class="page"> 
    <div ng-controller="controllername"> 
    <div ng-show="showvar">Hidden Stuff</div> 
    </div> 
</div> 

當我執行上showvar功能,使其真正出現在div(當假消失)如預期。

我也有一個完全獨立的div「外部」的原與NG-控制器屬性的div巢。因此,在這個單獨的層次結構中沒有ng-controller屬性,但是我用ng-show="showvar"屬性嵌套了另一個div。

更新的HTML結構是這樣

<div class="page"> 
    <div ng-controller="controllername"> 
    <div ng-show="showvar">Hidden Stuff</div> 
    </div> 
    <div class="seperate"> 
    <div ng-show="showvar">More Hidden Stuff</div> 
    </div> 
</div> 

頁面加載,既的div與在單獨的巢被隱藏作爲ng-hideng-show="showvar"已由角追加。當我在頁面加載之後執行showvar上的功能以使其成功時,只顯示ng-controller div中的div。

我(覺得我)明白這是因爲ng元素在頁面加載時被評估(並且附加了ng-hide,甚至在控制器之外?),但是隻有ng-controller屬性的div中的ng元素是在頁面加載後執行功能時評估。它是否正確?

我怎樣才能得到其他NG-節目被評估NG控制器DIV的「外部」?

我在想一個選項是NG-控制器附加到整體頁面'DIV,而不是div嵌套。但我還有什麼其他選擇?

編輯:我也想簡單地增加ng-controller="controllername"到單獨的股利。我猜角'忽略'重複ng控制器div?

+0

是它必須有你的其他分區之外?請注意,你可以使它看起來像在外面用css,例如'位置:絕對;'。 – 2014-09-01 13:49:35

+0

是的,position:絕對是我嘗試通過單獨的div來解決的問題 – myol 2014-09-01 14:11:43

+0

您可以注入'$ rootScope'爲整個頁面創建一個變量。 – 2014-09-01 14:16:34

回答

1

問題你面對的是showvar位於您的控制器範圍內,您的第二次使用showvar不在該範圍內。

你需要做的是確保變量在需要的地方可用。

說你的變量添加到parentController(你沒有一個在你的榜樣,我得加一個)

<div class="page" ng-controller="parentController"> 
    <div ng-controller="controllername"> 
    <div ng-show="showvar">Hidden Stuff</div> 
    </div> 
    <div class="seperate"> 
    <div ng-show="showvar">More Hidden Stuff</div> 
    </div> 
</div> 

app.controller('ParentController', function($scope){ 
    $scope.showvar = false; 
}); 

問題,這是當您在controllername控制器內設置showvar爲真它會將其設置在innerscope中,而不是外部。當通過另一個對象訪問它時確保你有合適的範圍,你應該是安全的。

因此,嘗試這樣的:

<div class="page" ng-controller="parentController"> 
    <div ng-controller="controllername"> 
    <div ng-show="obj.showvar">Hidden Stuff</div> 
    </div> 
    <div class="seperate"> 
    <div ng-show="obj.showvar">More Hidden Stuff</div> 
    </div> 
</div> 

app.controller('ParentController', function($scope){ 
    $scope.obj = { 
    showvar: false 
    } 
}); 

Quick demo

1

這裏你的問題是,你以2個「showvar」變量結束:一個在「controllername」範圍內,另一個在應用範圍內(因爲你在你的html父頁中有一個ng-app聲明「div)。

加載頁面時,第一個div的控制器作用域中顯示爲「showvar」的值,而「separate」一個則在應用程序作用域中顯示「showvar」變量,因此它被解析爲「假」(即使角度在你的應用範圍內爲你聲明,你甚至可以在以後修改它的值)。

當您更改控制器範圍「showvar」的價值,它不會改變一個在應用範圍,使得「獨立」的div永遠留藏=)

+0

Thankyou中不滿意的角度來解釋角度解決頁面加載中的元素的問題 – myol 2014-09-01 13:55:56

+0

請您接受答案,然後呢? =) – 2014-09-01 16:42:29

+0

我欣賞你的解釋,因此得到了讚賞。然而@ red-X提供瞭解決方案和演示,所以我覺得有理由接受他的回答 – myol 2014-09-02 12:13:49