AngularJS ng-repeat与ng-click = orderByField结合使用

时间:2015-12-18 12:21:08

标签: javascript angularjs

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"> &#9652</span>
        <span ng-show="reverseSort"> &#9662</span>
    </span>
</th>

这是我的代码,我尝试从table中的密钥列表创建所有$scope.headers标头,并使每个标头可排序。

由于某种原因,此代码无法正常工作,我也不会在网络控制台中出现任何错误。

2 个答案:

答案 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"> &#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">

答案 1 :(得分:1)

您的$scope.headers初始化错误。您应该将其定义为

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