AngularJS
$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"> ▴</span>
<span ng-show="reverseSort"> ▾</span>
</span>
</th>
这是我的代码,我尝试从table
中的密钥列表创建所有$scope.headers
标头,并使每个标头可排序。
由于某种原因,此代码无法正常工作,我也不会在网络控制台中出现任何错误。
答案 0 :(得分: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"> ▴</span>
<span ng-show="modelData.reverseSort"> ▾</span>
</span>
</th>
与@VVK一样,您的代码中存在问题。不确定您要尝试定义Array
或Object
,
对象应定义如下:{'First Name':'firstName','Last Name':'lastName'}
(它们应以{
开头,以}
结尾,但不以[]
结束;
更改您的HTML代码以使用modelData
,然后它将起作用:
<tr ng-repeat="item in data | orderBy:modelData.orderByField:modelData.reverseSort">
答案 1 :(得分:1)
您的$scope.headers
初始化错误。您应该将其定义为
$scope.headers={'First Name':'firstName','Last Name':'lastName'}