hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • AngularJS
Filter (bộ lọc) trong angularJS

Filter (bộ lọc) trong angularJS

  • 23-04-2022
  • Toanngo92
  • 0 Comments

Mục lục

  • Khái niệm và vai trò của filters trong angularJS
  • Danh sách các filters built-in trong angularJS
    • Currency filter
    • Date filter
    • Lowercase và uppercase
    • Search Filter
  • Custom Filters (filter tự định nghĩa)

Khái niệm và vai trò của filters trong angularJS

Khi tiếp cận với javascript thuần, chúng ta thấy, khi làm việc với dữ liệu, có một số tình huống chúng ta sẽ phải chuyển đổi kiểu giữ liệu liên tục khá phức tạp, lấy một ví dụ thực tế, khi chúng ta có một biến biểu diễn số tiền với kiểu dữ liệu là number (float), nếu chúng ta mong muốn in ra màn hình với định dạng tiền tệ, chúng ta sẽ phải làm tuần tự các bước sau:

  • Đổi kiểu dữ liệu thành chuỗi,
  • Nối chuỗi bằng cách bổ sung dấu $ phía sau chuỗi
  • In chuỗi đó ra bên trong nội dung HTML ( thông qua thuộc tính innerText)
  • Làm lại tuần tự các bước trên khi dữ liệu được cập nhật

Với angularJs, chúng ta có cơ chế filters hỗ trợ cho model để rút ngắn các phần việc này, model không cần phải chuyển đổi kiểu dữ liệu, filters sẽ thực hiện công việc lọc dữ liệu và in ra kết quả như chúng ta mong muốn. Nói ngắn gọn, filters định dạng lại dữ liệu khi hiển thị ra cho người dùng cuối

Cú pháp sử dụng filters trong angularJS:

{{expression | filter}}

Filter được đưa vào biểu thức thông qua ký tự “|” , kết sau đó là filter

Filter có thể được kết nối như mắt xích liên tiếp nhau, ví dụ:

{{expression | filter | filter}}

Trong trường hợp này, filter thứ nhất sử dụng để lọc biểu thức, filter thứ 2 tiếp tục lọc giá trị của filter thứ nhất.

Lưu ý: filter không thay đổi giá trị thực tế của biến, nó chỉ thay đổi định dạng hiển thị phía người dùng cuối.

Danh sách các filters built-in trong angularJS

Một số các filters phổ biến built-in trong angularJS:

  • Currency
  • Date
  • Lowercase
  • Uppercase
  • Search
  • …

Currency filter

Sử dụng để định dạng tiền tệ cho biểu thức, sẽ hiển thị ra cho người dùng theo định dạng tiền tệ

Docs: https://docs.angularjs.org/api/ng/filter/currency

Mặc định, nó sẽ sử dụng định dạng USD Dollars với 2 số đằng sau dấu . Ví dụ ở dưới mô tả vài cách sử dụng filter, ở tầng html template và tầng script, chúng ta có thể sử dụng cách dùng filter dưới tầng html hoặc filter trên tầng javascript, tuy nhiên cách tầng html sẽ phổ biến hơn:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
</head>
<body ng-app="myApp">
    <div ng-controller="myController">
        {{price | currency:'$ '}}
        <br/>
        {{price | currency: '$ ' : 0}}
        <br/>
        {{price2 | currency:'VND '}}
        <br/>
        <input type="number" ng-model="price3" />
        <br/>
        {{changeprice()}}
    </div>
</body>
<script>
    var app = angular.module('myApp',[]);
    app.controller('myController',($scope,$filter) => {
        $scope.price = 1000;
        $scope.price2 = 2000;
        $scope.price3 = 4000;
        $scope.changeprice = function(){
            bind_model = $filter('currency')($scope.price3, '$ ', 5);
            return bind_model;
        }
    });
</script>
</html>

Kết quả khi in ra trình duyệt:

Tuy nhiên, dưới góc nhìn của mình, filters này không đáp ứng được VNĐ, vì tiền tệ nước mình hiển thị chứ VND bên phải số, nên filter này sẽ không đáp ứng được. Tất nhiên sẽ có giải pháp, chúng ta có thể tự định nghĩa custom filter

Date filter

Docs: https://docs.angularjs.org/api/ng/filter/date

Với date filter, chúng ta có thể biểu diễn được toàn bộ dữ liệu ngày tháng năm theo ý đồ chúng ta mong muốn khi hiển thị dữ liệu ra giao diện.

Xét ví dụ phía dưới để hiểu hơn về date filter:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Date filter</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
</head>
<body ng-app="myApp">
    <div ng-controller="myController">
        {{date | date:'dd/MM/yyyy'}}
    </div>
</body>
<script>
    var app = angular.module('myApp',[]);
    app.controller('myController',($scope) => {
        $scope.date = Date.now();
        console.log($scope.date);
    });
</script>
</html>

Kết quả khi in ra trình duyệt:

Chúng ta thấy, dữ liệu ở tầng javascript là timestamp biểu diễn thời gian hiện tại trong lúc mình viết code theo UNIX timestamp, nhưng khi in ra giao diện, nhờ cơ chế filter của angularJS, chúng ta đã in ra được giá trị ngày tháng năm có thể đọc được.

Không chỉ như vậy, filter date có rất nhiều option giúp bạn biểu diễn ra các định dạng khác nhau, đọc trên docs để hiểu thêm.

Lowercase và uppercase

Filter này dùng để lọc dữ liệu và định dạng lại thành chuỗi chữ thường hoặc chuỗi chữ hoa

{{expression | lowercase}}
{{expression | uppercase}}

Search Filter

Bộ lọc sử dụng cho việc tìm kiếm dữ liệu trong một danh sách, khá tiện lợi, xem ví dụ phía dưới để hiểu hơn vấn đề:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Search filter</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
</head>

<body ng-app="myApp">
    <div ng-controller="myController">
        <input type="text" ng-model="search" placeholder="Search">
        <table>
            <tr ng-repeat="x in listUser | filter:search">
                <td>
                    {{x.name}}
                </td>
                <td>
                    {{x.age}}
                </td>
            </tr>
        </table>
    </div>
</body>
<script>
    var app = angular.module('myApp', []);
    app.controller('myController', ($scope) => {
        $scope.listUser = [
            { name: "toan", age: 20 },
            { name: "huy", age: 21 },
            { name: "hieu", age: 22 },
            { name: "toan", age: 34 },
        ];
    });
</script>

</html>

Giao diện khi in ra trình duyệt

Custom Filters (filter tự định nghĩa)

Nếu những filter builtin không đủ để sử dụng, chúng ta hoàn toàn có thể tự định nghĩa một custom directive để lọc theo ý muốn. Cú pháp khởi tạo custom filter:

app.filter('filtername',function(){});

Ở ví dụ dưới, mình tạo một filter với bộ lọc sử dụng cho định dạng tiền tệ VND

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
</head>

<body ng-app="myApp">
    <div ng-controller="myController">
        {{price | vndFilter}}
    </div>
</body>
<script>
    var app = angular.module('myApp', []);
    app.filter('vndFilter', function () {
        return function (x) {
            x = x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); // convert float to string decimal thousand separator
            x += ' VND'; // concat with VND
            return x;
        };
    })
    app.controller('myController', function ($scope) {
        $scope.price = 5000000;
    });
</script>

</html>

Kết quả khi hiển thị ra trình duyệt

Bài viết liên quan:

Factory và Service trong angularJS
Cơ chế dependency Injection (cơ chế tiêm phụ thuộc) trong angularJS
Animation trong angularJS
Form validation trong angularJS
Route (định tuyến) trong angularJS
Service trong AngularJS và các service giao tiếp với máy chủ
Scope và rootScope trong AngularJS
Directive (chỉ thị) trong angularJS và danh sách các directive
Event handling (xử lý xự kiện) trong angularJS
Cơ chế Data binding trong AngularJS
Expressions (biểu thức) trong AngularJS
Views trong AngularJS

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

4. KIỂM THỬ VÀ TRIỂN KHAI HỆ THỐNG

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×