2014-03-27 86 views
1

這裏是我的問題: 當我雙擊數組中的一行時,我想使消失我的頁面的幾個部分。問題是......我不知道如何做到這一點。AngularJS-ng-hide與不同的ng控制器

基本上,這裏是我的html文件:

<div id="mainWindow" ng-hide="hideAlias" ng-controller="mainWindow"> 
... 
<div id="table{{workspace.name}}" class="table" ng-controller="table" > 
    <table id="mainTable" class="mainTable"> 
     <tr class="tableHeader"> 
      <th>AA</th> 
      <th>BB</th>  
      <th>Options</th> 
     </tr> 
     <tr class="tableRows" id ="{{row}}" ng-repeat = "row in rowstable"> 
      <td ng-dblclick="dblclick()" >{{row.AA}} </td> 
      <td>{{row.server}} <input type="button" ng-click="clickOnDeleteServer(row.BB)" value="X" style="float:right"/></td> 
      <td> 
       <input type="button" ng-click="clickOnView()" value="View"></input> 
       <input type="button" ng-click="clickOnDelete(row.AA)" value="Delete"></input> 
      </td> 
     </tr> 

    </table> 
</div> 

... 
</div> 

我試圖做到這一點,控制器 「表」 裏:

$scope.dblclick = function(){ 
    mainWindow.hideAlias=!mainWindow.hideAlias 
} 

hideAlias的值從false更改爲true時我雙擊,反之亦然。然而,頁面上沒有任何事情發生(沒有東西會被隱藏)

任何線索?非常感謝

編輯:

控制器定義: 功能表($範圍,$ HTTP,$路徑){

+0

爲什麼通過'mainWindow'引用'hideAlias'?你能粘貼你的控制器定義嗎? AFAIK,應該是'$ scope.hideAlias'而不是'mainWindow.hideAlias' - 通過控制器範圍引用它,而不是控制器本身。 – callmekatootie

+0

是的,我已經試過$範圍,但它沒有工作,所以我正在嘗試其他東西。我編輯了我的消息與th控制器的定義(不知道是否它是你的意思:)) – WellWellWell

回答

1

變量hideAlias沒有在主窗口控制器上存在。 你想要做的是在mainWindow控制器和表控制器之間共享數據。

有這樣做的幾種方法,我會通過事件emmiters告訴你的控制器之間的一個

共享數據

在較高水平,控制表將數據發送到控制器主窗口和控制器表是控制主窗口的孩子,所以這裏是你如何與事件emmiters做到這一點:

Controller mainWindow: 


    $scope.$on('EventFromTableController',function(data){ 

      $scope.hideAlias = data.hideAlias; 

    }); 

這將告訴控制器主窗口來監聽EventFromTableController事件。該事件將包含附加的數據。在這種情況下,它將保存子控制器的hideAlias值。

在控制器表

現在:

Controller table: 

    var tableHideAlias = true; // initialize it to true or false 

    $scope.dblclick = function(){ 
     //change the local tableHideAlias state 
     tableHideAlias = !tableHideAlias; 

     // emit the new hideAlias value 
     $scope.$emit('EventFromTableController',{hideAlias: tableHideAlias}); 

    } 

所以DBLCLICK執行時,它會發出新的hideAlias值父控制器(主窗口)。

這樣,ng-hide將有一個hideAlias範圍變量來評估它的狀態。

+0

哦,很酷,我不知道這個「事件的東西」:)謝謝! – WellWellWell

+0

不客氣。請注意,雖然有其他選項,例如創建服務並將其作爲依賴項傳遞給mainWindow和表控制器。我個人喜歡Event Emmiters模型:) –

+1

順便說一句,這適用於$發射,因爲我們將事件從_child_控制器發送到父控制器。如果您想將事件從_parent_控制器發送到子控制器,則可以使用$ broadcast。 –

1

您可以通過簡單的方法實現此目的。

在您的情況控制器中,mainWindow是父控制器和控制器,表是子控制器。

爲父控制器創建一個對象,並在雙擊事件時訪問或更改子控制器中的值。

var app = angular.module('myapp',[]); 
app.controller('mainWindow',function($scope){ 
    $scope.parentobj = {}; 
    $scope.parentobj.hideAlias = false; 
}); 
app.controller('table',function($scope){ 
    $scope.dblclicktest=function() 
    { 
     $scope.parentobj.hideAlias=true; 
    } 
}); 

,並使用父對象範圍,HTML隱藏股利

<div id="mainWindow" ng-hide="parentobj.hideAlias" ng-controller="mainWindow"> 

這裏是JSFiddle

在的jsfiddle,上AA雙擊將隱藏股利。