2015-12-18 51 views
2

AngularJSAngularJS NG重複聯合NG單擊= orderByField

$scope.orderByField = 'firstName'; 
$scope.reverseSort = false; 
$scope.headers = ['First Name':'firstName','Last Name':'lastName'] 

查看

<th 
    ng-repeat="(key,value) in headers" 
    ng-click="orderByField=value; reverseSort = !reverseSort"> 
    {{ key }} 
    <span ng-show="orderByField == value"> 
     <span ng-show="!reverseSort"> &#9652</span> 
     <span ng-show="reverseSort"> &#9662</span> 
    </span> 
</th> 

這是我的代碼,我試圖創建一個從所有table$scope.headers中的密鑰列表,並使每個頭可排序。

由於某些原因,此代碼不起作用,我也沒有在Web控制檯中發現任何錯誤。

+0

請把它放到plunker:http://plnkr.co/ –

回答

2

存在嵌套作用域的問題。請閱讀https://github.com/angular/angular.js/wiki/Understanding-Scopes中的嵌套示波器問題。

關於你如何解決它從那裏創建一個對象和使用價值:

$scope.modelData = {}; 
$scope.modelData.orderByField = 'firstName'; 
$scope.modelData.reverseSort = false; 
$scope.headers = {'First Name':'firstName','Last Name':'lastName'} 

現在,相應地使用:

<th ng-repeat="(key,value) in headers" 
    ng-click="modelData.orderByField = value; modelData.reverseSort = !modelData.reverseSort"> 
    {{ key }} 
    <span ng-show="modelData.orderByField == value"> 
     <span ng-show="!modelData.reverseSort"> &#9652</span> 
     <span ng-show="modelData.reverseSort"> &#9662</span> 
    </span> 
</th> 

像@VVK回答,沒有在你的代碼中的問題。不知道你正試圖定義一個ArrayObject

對象應該像這樣定義的:{'First Name':'firstName','Last Name':'lastName'}(他們應該開始{}結束,但不[]);

更改HTML代碼中使用modelData,然後它會工作:

<tr ng-repeat="item in data | orderBy:modelData.orderByField:modelData.reverseSort"> 
+0

我用你的代碼,但該領域仍沒有得到排序,這裏是plunker [鏈接]( http://plnkr.co/edit/Rj1NmrF68GVyRr3Wl0wv?p=preview) – Koten

+0

您的代碼中存在拼寫錯誤。看到我更新的答案。 –

+0

對不起,我沒有保存它,現在檢查鏈接,每列中的字段沒有得到排序。 – Koten

1

$scope.headers初始化是錯誤的。你應該把它定義爲

$scope.headers={'First Name':'firstName','Last Name':'lastName'}