2015-05-30 47 views
3

我是Angular的新手,如果你點擊一個選項卡,ng-repeat會顯示一些屬性,如果你點擊不同的標籤,ng-repeat witll顯示一切與不同的屬性。但是我不能讓tab控制器和ng-show一起工作。這裏是我的代碼:Angular-JS。如何讓控制器在ng-repeat中重複ng-show

<ul class = "nav nav-pills" ng-controller = "TabController as tabCtrl"> 
     <li ng-class="{'active':tabCtrl.isTab(1)}"> 
     <a ng-click="tabCtrl.setTab(1)" href = "#"> All </a> 
     </li> 
     <li ng-class="{'active':tabCtrl.isTab(2)}"> 
     <a ng-click="tabCtrl.setTab(2)" href = "#"> Online </a> 
     </li> 
     <li ng-class="{'active':tabCtrl.isTab(3)}"> 
     <a ng-click="tabCtrl.setTab(3)" href="#"> Offline </a> 
     </li> 
    </ul> 
    ... 
    <div class = "user" ng-repeat="streamer in twitch.users" ng-show="tabCtrl.isTab(1)"> 
     //... repeated stuff here 
    </div> 

這裏是TabController JS代碼:

app.controller('TabController', function(){ 
     this.tab = 1; 
     this.setTab = function(t){ 
     this.tab = t; 
     } 
     this.isTab = function(t){ 
     return (this.tab == t); 
     } 
    }) 

但是NG-show顯示毫無作爲ISTAB()始終是假的。任何人都可以向我解釋爲什麼?

+0

javascript控制檯中是否有任何輸出? –

+0

這是一個常見的問題,'this'在函數內部改變了上下文(它不是在函數內部引用控制器*)。人們使用[模式](http://stackoverflow.com/q/962033/398606),在那裏他們保持對具有「自我」的控制器的引用。然後你可以在函數內使用'self'來訪問控制器。 (試圖找到一個角度具體的例子) –

回答

1

使用我在引用中引用的pattern來保留對控制器對象的引用。這是你如何使用AngularJS中的「controller as」語法來實現的:

app.controller('TabController', function(){ 
    var self = this; 
    this.tab = 1; 

    this.setTab = function(t){ 
     // inside a function "this" is not the controller 
     // it is a reference to the function 
     self.tab = t; 
    }; 

    this.isTab = function(t){ 
     return (self.tab == t); 
    }; 
}) 
+0

我改變了它,就像你說的方式,但仍然沒有顯示出來。看起來像tabCtrl只能在 範圍內工作'''

    ...
''' – ylin6

+0

找到解決方案,是一個範圍問題。將ng-controller移動到父div並且一切正常! – ylin6