プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • AngularJS
  • 【AngularJS】基本
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【AngularJS】基本

02.20

  • miyabisan2
  • 2件のコメント

この記事は3分で読めます

AngularJSとは?

Googleが作っているJavaScriptのSPAを作れるMVCフレームワーク。Angular(AngularJS2)とは別物。別物ではあるのでいまだにAngularJSで作られているアプリケーションも存在はします。

MVWパターン

model

データ

1
const name = "taro"

view

ビュー。HTMLのこと。

whatever

モデルとviewをバインドしてくれる何か。AngularJSでは色々な方法があるので特に名前をつけていない。ほとんどの場合コントローラーを作る。

Module、Controller

1
2
const myApp = angular.module('myApp',[]);
myApp.controller('mainController');

モジュールの第二引数は依存しているモジュールを入れる。

Scope

AngularJSの最も重要な機能。ViewとModelをバインドしてくれる存在。

model

1
2
3
4
5
6
7
8
9
const myApp = angular.module('myApp', []);
myApp.controller('mainController', function($scope) {
    $scope.name = '田中 太郎';
    $scope.age = 15;
    $scope.getname = function() {
        return '田中';
    }
    console.log($scope);
});

$scope

「$」には特別な意味があるわけではない。単純な変数名。中身は結構複雑な変数になっています。中身はAngularJsがDIで注入している。

scopeには自由にプロパティを追加できる。

view

中括弧二つとscopeはくっついている。「$scope.name = '田中 太郎';」であればこのように出力する。

1
2
3
<div ng-controller="mainController">
  <h1>{{ name + 'さん'}}、 こんにちは!</h1>
</div>

DI

$scopeと指定するだけでAngular側はscopeサービスを注入しないといけないなという動きになる。他にも色々なサービスがあり$logなどと指定するとlogサービスを注入してくれたりする。

1
2
3
4
5
6
7
8
const myApp = angular.module('myApp', []);
myApp.controller('mainController', function($scope) {
    console.log($scope); // Angular側が自動で「$scope」という名前だけ見て判定して注入してくれる。
});
const search = function (firstName, $scope, height, age) {
    return '田中 太郎';
};
console.log(angular.injector().annotate(search)) // 関数の引数の名前が配列で帰る。

minify化

以下のように配列化することでminify化もできるようになります。(配列化しないとminify化した時の変数名の省略化に対応できないため。)

1
2
3
myApp.controller('mainController', ['$scope','$log',function($scope,$log) {
    console.log($scope);
}]);

ポイントとしては、配列の最後にfunctionを持ってくること。

サービス

基本はシングルトンになり、ソース全体で共有されます。ただ、$scopeだけは新たにインスタンスを作ります。

$logサービス

AngularJSでログを出力したい場合はこれを使う。console.logはベストじゃない。

1
2
3
4
5
6
7
const myApp = angular.module('myApp', []);
myApp.controller('mainController', function($log) {
    $log.log("テスト");
    $log.debug("debug");
    $log.info("info");
});
 

$filterサービス

1
2
3
4
const myApp = angular.module('myApp', []);
myApp.controller('mainController', function($filter) {
    $filter("uppercase")('emiry'); // 大文字にできる。EMIRY
});

$locationサービス

URLを確認できる。

$watch

変化の前の値と新しい値を管理している。

$digestループ

何かしたらの値に変化があったかチェックする。その変数に関連する人全てに対して更新をかけていく。

1
2
3
4
5
6
7
8
9
const myApp = angular.module('myApp', []);
myApp.controller('mainController', ['$scope', function ($scope) {
    $scope.handle = '';
    
    $scope.$watch('handle', function(newValue, oldValue) {
        console.log('旧:', oldValue);
        console.log('新:', newValue);
    });
}]);

上記例では、handleという変数が変化があった場合はwatchで設定した関数が呼ばれる。(digestループ)

$http

外部データをフェッチする。XMLHttpRequestをラップしたもの。

他パッケージ(モジュール)

Angularはコアモジュール以外にもいろんなモジュールがあります。

angular-messages

formのバリデーションができるモジュール

https://www.npmjs.com/package/angular-messages

第二引数に依存モジュールを追加します。(angular-messagesであればngMessages)

model

1
2
3
4
const myApp = angular.module('myApp', ['ngMessages']);
myApp.controller('mainController', function ($scope, $log, $filter, $resource) {
    console.log($resource);
});

view

<div ng-message="required">aaa</div>

angular-route

AngularJSでSPAを実装する上でなくてはならないパッケージ。(なお、ui-routeというサードパーティのパッケージなどは存在する)

以下のように遷移先のページと紐づけるコントローラーをそれぞれ指定できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
myApp.config(function($routeProvider) {
    
    $routeProvider
    .when('/', {
        templateUrl: 'pages/first.html',  
        controller: 'firstController'
    })
    
    .when('/second', {
        templateUrl: 'pages/second.html',
        controller: 'secondController'
    })
    
});

Directive

AngularJSにどのようにDOMを組み立てるか記した説明書のようなもの。(classを追加したり、特定のDOMを見えなくしたり、DOMを生成したりと)

ng-controller

コントローラーを定義する。幾つでも定義ができる。scopeに関してはコントローラーごとに別々のインスタンスになるので競合しない。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const myApp = angular.module('myApp', []);
myApp.controller('firstController', ['$scope', function ($scope) {
    $scope.name = 'First';
    
}]);
 
myApp.controller('secondController', ['$scope', function ($scope) {
    $scope.name = 'Second';
    
}]);
 
    <div class="container">
        <div ng-controller="firstController">
            <h1>{{ name }}</h1>
            
        </div>
        
        <div ng-controller="secondController">
            
            <h3>{{ name }}</h3>
            
        </div>
    </div>

ng-if

条件分岐を作れる。DOMは消える。

ng-show

条件分岐を作れる。DOMは残る。

ng-class

条件付きでclass適用などができる。

ng-click

関数をかける。

ng-cloak

遅延描画させることができる。ネット回線が遅い環境などで使える。

ng-repeat

for文。最もよく使う。

ng-view

angular-routeで実装した場合にHTMLを挿入してくれる。

ng-model

scopeの中に変数を探してバインドしてくれる。双方向Binding。viewの中で行った変更はソースに反映され、ソースの中で行った変更はviewに反映される。jQueryで書く場合めちゃくちゃコードを書かないといけないのに比べてすごく便利。

1
2
3
4
5
6
7
const myApp = angular.module('myApp', []);
myApp.controller('mainController', ['$scope', function ($scope) {
    $scope.handle = '';
}]);
 
<input type="text" ng-model="handle" />
<h1>{{handle}}</h1>

なお、この場合は変数ですが、functionなどもfunction()などと定義してあげることで呼び出すことも可能です。(scopeとfilterを組み合わせるなどをしたい場合などに使える。)

スポンサーリンク
  • 2025 02.20
  • miyabisan2
  • 2件のコメント
  • AngularJS
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る
  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

人気のGPTs

【cursor】基本

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー