مرتب سازی سطرها براساس عنوان جدول در AngularJS
چهارشنبه 24 شهریور 1395در این مقاله نحوه ی مرتب سازی ردیف های جدول براساس عنوان در AngularJS آشنا می شوید و آن را دریک برنامه ی ساده پیاده سازی می کنیم و سپس به بررسی آن می پردازیم.
بررسی مختصر:
در این مقاله ، خواهیم دید که چگونه داده ها را براساس عنوان جدول مرتب سازی کنیم.در مقاله ی قبلی ، ما دیدیم که چگونه داده را براساس صعودی و نزولی مرتب کنیم.
معرفی:
در این مقاله خواهیم دید که چگونه داده را به شیوه ای دو طرفه در AngularJS مرتب کنیم.آنچه که در اینجا می خواهیم این است ، زمانی که بر روی عنوان ستون کلیک کنیم ، می توانیم براساس صعودی و نزولی مرتب سازی کنیم. در ابتدا ، ما یک drop-down برای مرتب کردن داده ها داریم.در اینجا ،ما بر روی عنوان ستون ، برای مرتب سازی براساس صعودی یا نزولی کلیک میکنیم .
حال ، در model ، ما یک reverseSort اضافه می کنیم که یک property از نوع Boolian خواهد بود.
1. $scope.reverseSort=false;
حال ، ما یک تابع اضافه میکنیم که یک مقدار را براساس نام ستون معرفی می کند.
• $scope.SortData = function (column) { • $scope.reverseSort = ($scope.SortColumn==column) ? !$scope.reverseSort :false • • }
حال به تابع با دقت نگاه کنید .در اینجا ، ما Sortdata را به شی Scope وصل کردیم که در آن شرط if else را اعمال کردیم.
اگر این گزاره ($scope.SortColumn==column) ? برابر true باشد ، سپس ستون را مرتب سازی می کند یا در غیر اینصورت مقداره این گزاره برابر false خواهد شد و عملوند !(NOT) اجرا خواهد شد.
1. $scope.SortData = function (column) { 2. $scope.reverseSort = ($scope.SortColumn == column) ? !$scope.reverseSort : false; 3. $scope.SortDate = column; 4. 5. }
حال می خواهیم یک تابع به نام getSortClass درج کنیم .در این تابع ، یک حلقه ی if دیگر میزنیم.بنابراین اگر مقدارtrue باشد داده ها را به صعودی یا نزولی مرتب خواهد کرد.
1. $scope.getSortClass = function (column) 2. { 3. if ($scope.SortColumn == column) { 4. return $scope.reverseSort ? 'arrow-down' : 'arrow-up' 5. } 6. }
دراینجا ، ما گزاره ی if را پاس می دهیم.اگر گزاره ی $scope.SortColumn برابر true باشد ، سپس داده ها را به صورت معکوس مرتب می کند و برمیگرداند در غیر اینصورت ، خروجی ، یک کلاس CSS است که فلش رو به بالا و پایین دارد .
برای اضافه کردن کلاس CSS ، فقط کد زیر را در CSS بنویسید.
arrow-up { 2. width:0; 3. height:0; 4. border-left:5px solid transparent; 5. border-right:5px solid transparent ; 6. border-bottom:10px solid black; 7. } 8. 9. .arrow-down { 10. width:0; 11. height:0; 12. border-left:5px solid transparent; 13. border-right:5px solid transparent; 14. border-top:10px solid black; 15. }
حال ، اگر شما نیاز دارید که یک رشته ی خالی برگردانید ، مرتبسازی فقط برای یک ستون امکان پذیر خواهد بود و بقیه ی ستون ها رشته ی خالی برمی گردانند.
Return ‘’;
بنابراین کد نهایی ما به شکل زیر است:
/// <reference path="angular.min.js" /> //Create a module var mypartone = angular .module("mymodule", []) .controller("myController", function ($scope) { var employees = [ { name: "ایمان", dateOfBirth: new Date("July 21,1960"), Address: "تهران", Salary: "1234.34" }, { name: "سجاد", dateOfBirth: new Date("July 20,1960"), Address: "کرج", Salary: "12.34" }, { name: "رضا", dateOfBirth: new Date("July 19,1960"), Address: "تهران", Salary: "1235.34" }, { name: "سارا", dateOfBirth: new Date("July 18,1960"), Address: "شیراز", Salary: "5589.34" } ]; $scope.employees = employees; $scope.SortColumn = "name"; $scope.reverseSort = false; $scope.SortData = function (column) { $scope.reverseSort = ($scope.SortColumn == column) ? !$scope.reverseSort : false; $scope.SortDate = column; } $scope.getSortClass = function (column) { if ($scope.SortColumn == column) { return $scope.reverseSort ? 'arrow-down' : 'arrow-up' } return ''; } });
حال ، به View برمیگردیم:
در حال حاضر خروجی به صورت زیر است:
ما به فلش رو به بالا و فلش رو به پایین برای مرتب کردن داده ها نیاز داریم.بنابراین داده ها را براساس نام مرتب سازی می کنیم.بنابراین در بخش th نیاز داریم دایرکتیو ng-click و SortClass پاس دهیم و آن ها را به نام متصل کنیم.
<th ng-click="sortData('name')">
حال ، ما به فلش روبه بالا و فلش رو به پایین نیاز داریم.برای نمایش آن ها ، ما یک div که شامل ng-class می باشد که در آن getSortClass فراخوانی می شود را پاس می دهیم.
Name<div ng-class="getSortClass('name')" ></div>
به طور مشابه ، برای ستون های دیگر این کار را انجام دهید.
<th ng-click="SortData('name')"> نام<div ng-class="getSortClass('name')"></div> </th> <th ng-click="SortData('dateOfBirth')"> تاریخ تولد <div ng-class="getSortClass('dateOfBirth')"></div> </th> <th ng-click="SortData('Address')"> آدرس <div ng-class="getSortClass('Address')"></div> </th> <th ng-click="SortData('Salary')"> حقوق <div ng-class="getSortClass('Salary')"></div> </th>
همچنین ، ما برای مرتب سازی داده ها باید به reverseSort در ng-repeat ارسال کنیم.
<tr ng-repeat="employee in employees|orderBy:SortColumn:reverseSort">
بنابراین کد نهایی ما به شکل زیر است:
<table> <thead> <tr> <th ng-click="SortData('name')"> نام<div ng-class="getSortClass('name')"></div> </th> <th ng-click="SortData('dateOfBirth')"> تاریخ تولد <div ng-class="getSortClass('dateOfBirth')"></div> </th> <th ng-click="SortData('Address')"> آدرس <div ng-class="getSortClass('Address')"></div> </th> <th ng-click="SortData('Salary')"> حقوق <div ng-class="getSortClass('Salary')"></div> </th> </tr> </thead> <tbody> <tr ng-repeat="employee in employees|orderBy:SortColumn:reverseSort"> <td>{{employee.name | uppercase }}</td> <td>{{employee.dateOfBirth | date : "dd/MM/yyyy" }}</td> <td>{{employee.Address | lowercase }}</td> <td>{{employee.Salary | number :2 }}</td> <!--<td>{{employee.Salary| currency }}</td>--> </tr> </tbody> </table>
حال فقط صفحه را بارگذاری کنید.
زمانی که روی قسمت نام کلیک می کنید ، داده ها به صورت نزولی مرتب می شود.
آموزش angular
- AngularJs
- 1k بازدید
- 1 تشکر