検索
ホームページウェブフロントエンドjsチュートリアルAngularjs_AngularJS でのフィルターの使用の詳細な説明

フィルターの機能は、入力を受け取り、特定のルールに従って処理し、処理された結果をユーザーに返すことです。フィルターはテンプレート、コントローラー、またはサービスで使用でき、フィルターのカスタマイズも簡単です。

テンプレートでフィルターを使用する

フィルターは、次の構文式を使用してビュー テンプレートで使用できます:

{{ 式 | フィルタ }}

例: {{ 12 | 通貨 }} という形式は、通貨フィルターを使用して数値 12 を通貨形式にフィルターし、結果は $12.00 になります。

フィルターは、別のフィルターの結果に適用できます。これは「チェーン」と呼ばれ、次の構文で使用されます:

{{ 式 | フィルター 2 ... }}

フィルタではパラメータが必要な場合があります。構文は次のとおりです:

{{ 式 | フィルター:引数 1:引数 2:... }}

例: {{ 1234 |number:2 }} の形式は、number のフィルターを使用して、数値 1234 を小数点 2 桁の数値にフィルターします。結果は 1,234.00 です。

コントローラー、サービス、ディレクティブでフィルター
を使用する

コントローラー、サービス、ディレクティブでフィルターを使用できます。

これを行うには、依存関係名をコントローラー/サービス/ディレクティブ: フィルターに挿入する必要があります。たとえば、フィルターが数値の場合、依存関係を使用してnumberFilter を挿入する必要があります。挿入されたパラメーターは、最初のパラメーターとして値を受け取り、2 番目のパラメーターを使用してパラメーターをフィルター処理する関数です。

次の例では、filter というフィルターを使用します。このフィルターは、サブ配列に基づいて配列を削減できます。 {{ctrl.array|filter:'a'}} のようなマークアップをビュー テンプレートに適用することもできます。これにより、'a' の全文検索が行われます。ただし、ビュー テンプレートでフィルターを使用すると、各フィルターが再度フィルター処理され、配列が比較的大きい場合は複数回読み込まれることになります。

したがって、次の例ではコントローラー内のフィルターを直接呼び出します。これにより、コントローラーは必要に応じてフィルターを呼び出すことができます (例: バックエンド データがロードされたとき、またはフィルター式が変更されたとき)。

index.html:

<div ng-controller="FilterController as ctrl">
 <div>
  All entries:
  <span ng-repeat="entry in ctrl.array">{{entry.name}} </span>
 </div>
 <div>
  Entries that contain an "a":
  <span ng-repeat="entry in ctrl.filteredArray">{{entry.name}} </span>
 </div>
</div>
 

script.js:

angular.module('FilterInControllerModule', []).
controller('FilterController', ['filterFilter', function(filterFilter) {
 this.array = [
  {name: 'Tobias'},
  {name: 'Jeff'},
  {name: 'Brian'},
  {name: 'Igor'},
  {name: 'James'},
  {name: 'Brad'}
 ];
 this.filteredArray = filterFilter(this.array, 'a');
}]);

結果は次のとおりです:

All entries: Tobias Jeff Brian Igor James Brad
Entries that contain an "a": Tobias Brian James Brad

カスタムフィルターの作成:

独自のフィルターの作成は非常に簡単です。モジュールに新しいフィルター ファクトリ関数を登録するだけです。内部的には、filterProvider がここで使用されます。このファクトリー関数は、最初の引数として入力値を持つ新しいフィルター関数を返す必要があります。フィルター パラメーターはすべて、追加パラメーターとしてフィルター関数に渡されます。

このフィルター関数は単純な関数である必要があります。これは、ステートレスかつ冪等である必要があることを意味します。入力関数が変更されると、Angular はこれらのプロパティに依存してフィルターを実行します。

注: フィルターの名前は、有効な角度式識別子である必要があります。たとえば、大文字や orderBy などです。名前にはハイフンやピリオドなどの特殊文字は使用できません。フィルターに名前空間を付ける場合は、大文字 (myappSubsectionFilterx) またはアンダースコア (myapp_subsection_filterx) を使用できます。

次のフィルター例は文字列を反転します。さらに、文字列を大文字にする条件を追加できます。

index.html

<div ng-controller="MyController">
 <input ng-model="greeting" type="text"><br>
 No filter: {{greeting}}<br>
 Reverse: {{greeting|reverse}}<br>
 Reverse + uppercase: {{greeting|reverse:true}}<br>
 Reverse, filtered in controller: {{filteredGreeting}}<br>
</div>
 

script.js

angular.module('myReverseFilterApp', [])
.filter('reverse', function() {
 return function(input, uppercase) {
  input = input || '';
  var out = "";
  for (var i = 0; i < input.length; i++) {
   out = input.charAt(i) + out;
  }
  // conditional based on optional argument
  if (uppercase) {
   out = out.toUpperCase();
  }
  return out;
 };
})
.controller('MyController', ['$scope', 'reverseFilter', function($scope, reverseFilter) {
 $scope.greeting = 'hello';
 $scope.filteredGreeting = reverseFilter($scope.greeting);
}]);

結果は次のとおりです:

No filter: hello
Reverse: olleh
Reverse + uppercase: OLLEH
Reverse, filtered in controller: olleh

ステートフルフィルター

ステートフル フィルターは Angular では最適化できず、パフォーマンスの問題が発生することが多いため、ステートフル フィルターを作成することを強くお勧めします。多くのステートフル フィルターは、非表示の状態をモデルとして公開し、それをフィルター パラメーターに変換するだけで、ステートレス フィルターに変換されます。

ただし、ステートフル フィルターを作成する必要がある場合は、フィルターを $stateful としてマークする必要があります。これは、フィルターが各 $digest サイクル中に 1 回以上実行されることを意味します。

インデックス、html

<div ng-controller="MyController">
 Input: <input ng-model="greeting" type="text"><br>
 Decoration: <input ng-model="decoration.symbol" type="text"><br>
 No filter: {{greeting}}<br>
 Decorated: {{greeting | decorate}}<br>
</div>
 

script.js:

angular.module('myStatefulFilterApp', [])
.filter('decorate', ['decoration', function(decoration) {

 function decorateFilter(input) {
  return decoration.symbol + input + decoration.symbol;
 }
 decorateFilter.$stateful = true;

 return decorateFilter;
}])
.controller('MyController', ['$scope', 'decoration', function($scope, decoration) {
 $scope.greeting = 'hello';
 $scope.decoration = decoration;
}])
.value('decoration', {symbol: '*'});

結果は次のとおりです:

No filter: hello
Decorated: *hello*

次回はangularjsにおけるfilterの一般的な使い方について記事を書きたいと思います。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
VUE3基础教程:使用filters进行数据过滤VUE3基础教程:使用filters进行数据过滤Jun 15, 2023 pm 08:37 PM

VUE3是目前前端开发中较为流行的一种框架,其所提供的基础功能能够极大的提高前端开发效率。其中filters就是VUE3中一个非常有用的工具,使用filters可以很方便地对数据进行筛选、过滤和处理。那么什么是filters呢?简单来说,filters就是VUE3中的过滤器。它们可以用于处理被渲染的数据,以便在页面中呈现出更加理想的结果。filters是一些

Vue 中使用 filters 实现数据格式化及数据过滤的技巧Vue 中使用 filters 实现数据格式化及数据过滤的技巧Jun 25, 2023 pm 06:49 PM

Vue.js是一款流行的JavaScript框架,它提供了许多实用的功能和工具来帮助前端开发人员开发优秀的应用程序。其中,filters(过滤器)是Vue.js中一个非常有用的功能,它可以用于数据的格式化和过滤。在Vue中,filters相当于模板中的管道,可以用来对数据进行处理和转换。比如,我们可以使用filters把日期格式从原始日期

2022年最新5款的angularjs教程从入门到精通2022年最新5款的angularjs教程从入门到精通Jun 15, 2017 pm 05:50 PM

Javascript 是一个非常有个性的语言. 无论是从代码的组织, 还是代码的编程范式, 还是面向对象理论都独具一格. 而很早就在争论的Javascript 是不是面向对象语言这个问题, 显然已有答案. 但是, 即使 Javascript 叱咤风云二十年, 如果想要看懂 jQuery, Angularjs, 甚至是 React 等流行框架, 观看《黑马云课堂JavaScript 高级框架设计视频教程》就对了。

使用PHP和AngularJS搭建一个响应式网站,提供优质的用户体验使用PHP和AngularJS搭建一个响应式网站,提供优质的用户体验Jun 27, 2023 pm 07:37 PM

在如今信息时代,网站已经成为人们获取信息和交流的重要工具。一个响应式的网站能够适应各种设备,为用户提供优质的体验,成为了现代网站开发的热点。本篇文章将介绍如何使用PHP和AngularJS搭建一个响应式网站,从而提供优质的用户体验。PHP介绍PHP是一种开源的服务器端编程语言,非常适用于Web开发。PHP具有很多优点,如易于学习、跨平台、丰富的工具库、开发效

使用PHP和AngularJS构建Web应用使用PHP和AngularJS构建Web应用May 27, 2023 pm 08:10 PM

随着互联网的不断发展,Web应用已成为企业信息化建设的重要组成部分,也是现代化工作的必要手段。为了使Web应用能够便于开发、维护和扩展,开发人员需要选择适合自己开发需求的技术框架和编程语言。PHP和AngularJS是两种非常流行的Web开发技术,它们分别是服务器端和客户端的解决方案,通过结合使用可以大大提高Web应用的开发效率和使用体验。PHP的优势PHP

如何使用PHP和AngularJS进行前端开发如何使用PHP和AngularJS进行前端开发May 11, 2023 pm 05:18 PM

随着互联网的普及和发展,前端开发已变得越来越重要。作为前端开发人员,我们需要了解并掌握各种开发工具和技术。其中,PHP和AngularJS是两种非常有用和流行的工具。在本文中,我们将介绍如何使用这两种工具进行前端开发。一、PHP介绍PHP是一种流行的开源服务器端脚本语言,它适用于Web开发,可以在Web服务器和各种操作系统上运行。PHP的优点是简单、快速、便

使用PHP和AngularJS开发一个在线文件管理平台,方便文件管理使用PHP和AngularJS开发一个在线文件管理平台,方便文件管理Jun 27, 2023 pm 01:34 PM

随着互联网的普及,越来越多的人在使用网络进行文件传输和共享。然而,由于各种原因,使用传统的FTP等方式进行文件管理无法满足现代用户的需求。因此,建立一个易用、高效、安全的在线文件管理平台已成为了一种趋势。本文介绍的在线文件管理平台,基于PHP和AngularJS,能够方便地进行文件上传、下载、编辑、删除等操作,并且提供了一系列强大的功能,例如文件共享、搜索、

如何在PHP编程中使用AngularJS?如何在PHP编程中使用AngularJS?Jun 12, 2023 am 09:40 AM

随着Web应用程序的普及,前端框架AngularJS变得越来越受欢迎。AngularJS是一个由Google开发的JavaScript框架,它可以帮助你构建具有动态Web应用程序功能的Web应用程序。另一方面,对于后端编程,PHP是非常受欢迎的编程语言。如果您正在使用PHP进行服务器端编程,那么结合AngularJS使用PHP将可以为您的网站带来更多的动态效

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。