AngularJS - 検索タブ

こんにちは、未来のプログラマーたち!今日は、AngularJSのエキサイティングな世界に飛び込み、検索タブの作成方法を学びます。あなたの近所の親切なコンピュータ教師として、私はこの旅をステップバイステップでガイドします。で、コーヒー(またはお気に入りの飲み物)を一杯取り、始めましょう!

AngularJS - Search Tab

AngularJS検索タブの紹介

コードに飛び込む前に、検索タブとは何か、そしてなぜそれが役立つかを理解しましょう。例えば、図書館のカタログやオンラインストアのような大量のデータを持つウェブサイトを構築しているとします。検索タブを使うことで、ユーザーは無限に続くページをスクロールすることなく、迅速に探しているものを見つけることができます。まるで、情報を即座に引き出すことができる超賢いアシスタントがいるようなものです!

プロジェクトの設定

まず最初に、プロジェクトを設定する必要があります。これまでやったことがない方も安心してください – 私があなたをガイドします!

ステップ1: AngularJSライブラリをインクルード

AngularJSを使うためには、HTMLファイルにそのライブラリを含める必要があります。HTMLの<head>セクションに以下の行を追加してください:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>

この行は、AngularJSをコードパーティに招待すること一样で、私たちが使うすべてのクールな機能にアクセスできるようにします。

ステップ2: HTML構造を作成

さあ、検索タブの基本構造を作成しましょう。以下是その样子です:

<div ng-app="searchApp" ng-controller="searchCtrl">
<input type="text" ng-model="searchText" placeholder="検索...">
<ul>
<li ng-repeat="item in items | filter:searchText">{{item}}</li>
</ul>
</div>

これを分解すると:

  • ng-app="searchApp": これは、AngularJSにこのdivが私たちのアプリケーションであることを伝えます。
  • ng-controller="searchCtrl": これは、HTMLをすぐに作成するためのコントローラーに接続します。
  • ng-model="searchText": これは、入力フィールドをsearchTextという変数にバインドします。
  • ng-repeat="item in items | filter:searchText": これは、items配列の各要素に対してフィルタリングされたリストアイテムを作成します。

AngularJSコントローラーの作成

HTML構造が整ったので、アプリケーションの脳 – コントローラー – を作成しましょう!

var app = angular.module('searchApp', []);

app.controller('searchCtrl', function($scope) {
$scope.items = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry', 'Fig', 'Grape'];
});

以下が何が起こっているか:

  1. AngularJSモジュールsearchAppを作成します。
  2. searchCtrlという名前のコントローラーを定義します。
  3. コントローラー内で、検索するためのアイテムの配列を作成します。

全てがどのように連携するか

検索ボックスに文字を入力すると、AngularJSは自動的にsearchText変数を更新します。ng-repeatディレクティブはこのsearchTextを使ってitems配列をフィルタリングします。まるで魔法のようですが、実際にはAngularJSが背後で動作しているだけです!

検索タブの強化

基本の検索が動作したので、少し凝らしてみましょう!

大文字・小文字区別しない検索

検索を大文字・小文字区別しないようにするには、フィルタを修正します:

<li ng-repeat="item in items | filter:searchText:ignoreCase">{{item}}</li>

カスタムフィルタ関数

より複雑なフィルタリングが必要な場合は、カスタムフィルタ関数を作成します:

app.controller('searchCtrl', function($scope) {
$scope.items = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry', 'Fig', 'Grape'];

$scope.customFilter = function(item) {
if (!$scope.searchText) return true;
return item.toLowerCase().indexOf($scope.searchText.toLowerCase()) !== -1;
};
});

HTMLでは:

<li ng-repeat="item in items | filter:customFilter">{{item}}</li>

このカスタムフィルタは、必要に応じてより複雑な検索ロジックを実装するためのものです。

検索タブのスタイル

検索タブの見た目も整えてみましょう!以下のCSSを使って少し洒落てみます:

<style>
.search-container {
max-width: 300px;
margin: 20px auto;
font-family: Arial, sans-serif;
}
input[type="text"] {
width: 100%;
padding: 10px;
margin-bottom: 10px;
border: 1px solid #ddd;
border-radius: 4px;
}
ul {
list-style-type: none;
padding: 0;
}
li {
padding: 8px;
background-color: #f1f1f1;
margin-bottom: 5px;
border-radius: 4px;
}
</style>

忘れずにsearch-containerクラスをメインのdivに追加してください!

全てを纏める

以下は、全ての要素が組み込まれた完全なHTMLファイルです:

<!DOCTYPE html>
<html ng-app="searchApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<style>
/* CSS styles here */
</style>
</head>
<body ng-controller="searchCtrl">
<div class="search-container">
<input type="text" ng-model="searchText" placeholder="検索...">
<ul>
<li ng-repeat="item in items | filter:customFilter">{{item}}</li>
</ul>
</div>
<script>
var app = angular.module('searchApp', []);
app.controller('searchCtrl', function($scope) {
$scope.items = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry', 'Fig', 'Grape'];
$scope.customFilter = function(item) {
if (!$scope.searchText) return true;
return item.toLowerCase().indexOf($scope.searchText.toLowerCase()) !== -1;
};
});
</script>
</body>
</html>

結論

おめでとうございます!あなたは刚刚AngularJSを使って機能的な検索タブを作成しました。プロジェクトの設定からカスタムフィルタの実装、スタイルの追加まで、多くのことをカバーしました。練習は完璧を生みますので、違うデータセットで試してみたり、検索タブにさらに機能を追加してみてください。

以下は、私たちが使った主なAngularJSディレクティブと概念の表です:

ディレクティブ/概念 目的
ng-app AngularJSアプリケーションを定義
ng-controller アプリケーションのコントローラーを指定
ng-model 入力フィールドを変数にバインド
ng-repeat コレクションを反復
filter 配列を基準にフィルタリング
カスタムフィルタ関数 更に複雑なフィルタリングロジックを実装

codingを続け、好奇心を持ち、楽しく検索を続けてください!

Credits: Image by storyset