ホームページ ウェブフロントエンド jsチュートリアル AngularJS フレームワークにおける $scope の役割とライフサイクルの詳細な分析_AngularJS

AngularJS フレームワークにおける $scope の役割とライフサイクルの詳細な分析_AngularJS

May 16, 2016 pm 03:12 PM
angularjs

$scope は Angular アプリ アプリケーション全体で使用され、データ モデルに関連付けられており、$scope を使用すると、スコープ ビューに基づいてチャネルが確立されます。 , データが変更されると、$scope がすぐに更新され、ビューがすぐに再レンダリングされます。

$scope をブリッジとして使用すると、アプリケーションのビジネス コードをすべてコントローラー内に置くことができ、データはコントローラーの $scope に保存されます。


201635151546605.jpg (463×316)

$scope は、ビュー (DOM 要素) をコントローラーに接続するオブジェクトです。 MVC 構造では、この $scope がモデルとなり、DOM 要素 (およびその子) にバインドされた実行コンテキストを提供します。

少し複雑に聞こえますが、$scope は実際にはコントローラーとビューの両方からアクセスできる JavaScript オブジェクトなので、これを使用して 2 つの間で情報を渡すことができます。この $scope オブジェクトには、ビュー上で実行されるデータと関数の両方を保存します。

すべての Angular アプリケーションには $rootScope があります。この $rootScope はトップレベルのスコープであり、ng-app ディレクティブ属性を含む DOM 要素に対応します。

$scope がページに明示的に設定されていない場合、Angular はここでデータと関数をバインドします。最初の部分の例はこれに依存して正常に実行されます。

この例では、$rootScope を使用します。 main.js ファイルで、このスコープに name 属性を追加します。この関数を app.run 関数内で実行することにより、アプリケーションの他の部分よりも前に実行されるようになります。 app.run 関数は、Angular アプリケーションのメイン メソッドと考えることができます。


app.run(function($rootScope) {
 $rootScope.name = "Ari Lerner";
});
ログイン後にコピー
これで、次のようにテンプレート式 {{}} を使用して、ビュー内の任意の場所でこの name 属性にアクセスできるようになります。

{{ name }}

ログイン後にコピー

$rootScope
Angular アプリケーションが起動してビューを生成すると、ルート ng-app 要素が $rootScope にバインドされます。$rootScope はすべての $scope のトップレベル オブジェクトであり、Angular のグローバル スコープ オブジェクトとして理解できます。アプリケーションにあまりにも多くのロジックや変数を追加するのは良い考えではありません。それは Javascript のグローバル スコープを汚染するのと同じです。


$scope の役割
$scope オブジェクトは、一般的な MVC フレームワークにおける Model の役割である Angular のデータ モデルとして機能しますが、$scope は処理や処理を行わないため、通常の意味でのデータ モデルとまったく同じではありません。データを操作するだけで、ビューと HTML の間にブリッジが確立され、ビューとコントローラー間の友好的な通信が可能になります。
その機能と機能をさらに体系的に分割してみましょう:

データ モデルの変更を監視するオブザーバーを提供します
  • データモデルの変更をアプリ全体に通知できます
  • ビジネス機能とデータを分離するためにネスト可能
  • 式のコンテキスト実行環境を提供します
  • JavaScript で新しい実行コンテキストを作成すると、実際には関数を使用して新しいローカル コンテキストが作成され、子 DOM 要素の新しいスコープが作成されます。

$scope ライフサイクル

Angular には「イベント」という概念もあります。たとえば、ng-model にバインドされた入力値が変更されたとき、または ng-click ボタンがクリックされたときに、Angular のイベント ループが開始されます。 Angular の非常に中心的な概念です。この記事の主な焦点ではないため、詳細については説明しません。興味がある場合は、ここでの情報を読んでください。このイベントは Angular の実行コンテキストと $scope で処理されます。この時点で、イベント ループが開始され、Angular はアプリケーション内のすべてのオブジェクトを監視し、ダーティ値チェック ループも開始されます。
$scope のライフサイクルには 4 つの段階があります:

1.

を作成します。

コントローラーまたはディレクティブが作成されると、Angular は $injector を使用して新しいスコープを作成し、コントローラーまたはディレクティブの実行時にスコープをそれに渡します。

2. リンク

Angular が開始されると、すべての $scope オブジェクトがビューにアタッチまたはリンクされ、$scope オブジェクトを作成するすべての関数もビューにアタッチされます。これらのスコープは、Angular コンテキストが変更されたときに実行されるように登録されます。関数。つまり、Angular はこれらの関数を使用するか、イベント ループを開始します。

3. アップデート

イベント ループが実行を開始すると、独自のダーティ値検出の実行が開始され、変更が検出されると、$scope で指定されたコールバック関数がトリガーされます。

4. 破壊する

一般に、$scope がビュー内で不要になった場合、Angular はそれを自動的にクリーンアップします。もちろん、$destroy() 関数を使用して手動でクリーンアップすることもできます。

ng-コントローラー

$scope オブジェクトを明示的に作成するには、ng-controller ディレクティブ属性を使用して、コントローラー オブジェクトを DOM 要素にアタッチする必要があります。

ng-controller指令给所在的DOM元素创建了一个新的$scope 对象,并将这个$scope 对象包含进外层DOM元素的$scope 对象里。在上面的例子里,这个外层DOM元素的$scope 对象,就是$rootScope 对象。这个scope链是这样的:

201635151716443.png (253×188)

现在,MyController 给我们建立了一个可以从DOM元素内部直接访问的$scope 对象。下面我们在的这个$scope 里创建一个person对象,在main.js中:

app.controller('MyController', function($scope) {
 $scope.person = {
  name: "Ari Lerner"
 };
});
ログイン後にコピー


现在我们可以在有ng-controller='MyController'属性的DOM元素的任何子元素里访问这个person 对象,因为它在$scope上。
除了一个例外,所有scope都遵循原型继承(prototypal inheritance),这意味着它们都能访问父scope们。对任何属性和方法,如果AngularJS在当前scope上找不到,就会到父scope上去找,如果在父scope上也没找到,就会继续向上回溯,一直到$rootScope 上。

唯一的例外:有些指令属性可以选择性地创建一个独立的scope,让这个scope不继承它的父scope们。

举个例子,假设我们有一个ParentController ,含有一个person 对象,又有一个ChildController 想要访问这个对象:

app.controller('ParentController', function($scope) {
 $scope.person = {greeted: false};
});
 
app.controller('ChildController', function($scope) {
 $scope.sayHello = function() {
  $scope.person.greeted = true;
 }
});
ログイン後にコピー

当我们在view里把ChildController 绑定到ParentController 之下,在子元素里我们就能访问ParentController 创建的父scope的属性,像访问ChildController 自己的scope中的属性一样:

<div ng-controller="ParentController">
 <div ng-controller="ChildController">
  <input type="text" ng-model="person.name" placeholder="Name"></input>
  <a ng-click="sayHello()">Say hello</a>
 </div>
 {{ person }}
</div>
ログイン後にコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル 入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル Jun 15, 2017 pm 05:50 PM

Javascript は、コードの構成、コードのプログラミング パラダイム、およびオブジェクト指向理論の点で非常にユニークな言語です。しかし、JavaScript が 20 年間主流であったとはいえ、jQuery、Angularjs、さらには React などの人気のあるフレームワークを理解したい場合は、「Black Horse Cloud Classroom JavaScript Advanced Framework」を見てください。デザインビデオチュートリアル」。

PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します Jun 27, 2023 pm 07:37 PM

今日の情報化時代において、ウェブサイトは人々が情報を入手し、コミュニケーションを図るための重要なツールとなっています。レスポンシブな Web サイトはさまざまなデバイスに適応し、ユーザーに高品質のエクスペリエンスを提供できます。これは、現代の Web サイト開発のホットスポットとなっています。この記事では、PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供する方法を紹介します。 PHP の概要 PHP は、Web 開発に最適なオープンソースのサーバー側プログラミング言語です。 PHP には、学びやすさ、クロスプラットフォーム、豊富なツール ライブラリ、開発効率など、多くの利点があります。

PHP と AngularJS を使用して Web アプリケーションを構築する PHP と AngularJS を使用して Web アプリケーションを構築する May 27, 2023 pm 08:10 PM

インターネットの継続的な発展に伴い、Web アプリケーションは企業情報構築の重要な部分となり、最新化作業に必要な手段となりました。 Web アプリケーションの開発、保守、拡張を容易にするために、開発者は開発ニーズに合った技術フレームワークとプログラミング言語を選択する必要があります。 PHP と AngularJS は非常に人気のある 2 つの Web 開発テクノロジであり、それぞれサーバー側とクライアント側のソリューションであり、これらを組み合わせて使用​​すると、Web アプリケーションの開発効率とユーザー エクスペリエンスを大幅に向上させることができます。 PHPPHPの利点

Flask と AngularJS を使用してシングルページ Web アプリケーションを構築する Flask と AngularJS を使用してシングルページ Web アプリケーションを構築する Jun 17, 2023 am 08:49 AM

Web テクノロジーの急速な発展に伴い、シングル ページ Web アプリケーション (SinglePage Application、SPA) は、Web アプリケーション モデルとしてますます人気が高まっています。従来の複数ページの Web アプリケーションと比較して、SPA の最大の利点は、ユーザー エクスペリエンスがよりスムーズであり、サーバーのコンピューティング負荷も大幅に軽減されることです。この記事では、FlaskとAngularJSを使って簡単なSPAを構築する方法を紹介します。 Flask は軽量の Py です

PHP プログラミングで AngularJS を使用するにはどうすればよいですか? PHP プログラミングで AngularJS を使用するにはどうすればよいですか? Jun 12, 2023 am 09:40 AM

Web アプリケーションの人気に伴い、フロントエンド フレームワーク AngularJS の人気も高まっています。 AngularJS は、Google が開発した JavaScript フレームワークで、動的な Web アプリケーション機能を備えた Web アプリケーションの構築に役立ちます。一方、バックエンド プログラミングの場合、PHP は非常に人気のあるプログラミング言語です。サーバーサイド プログラミングに PHP を使用している場合、PHP と AngularJS を使用すると、Web サイトにさらに動的な効果がもたらされます。

PHP と AngularJS を使用してオンライン ファイル管理プラットフォームを開発し、ファイル管理を容易にする PHP と AngularJS を使用してオンライン ファイル管理プラットフォームを開発し、ファイル管理を容易にする Jun 27, 2023 pm 01:34 PM

インターネットの普及に伴い、ネットワークを使用してファイルを転送したり共有したりする人が増えています。ただし、さまざまな理由により、FTP などの従来の方法をファイル管理に使用しても、現代のユーザーのニーズを満たすことができません。したがって、使いやすく、効率的で安全なオンライン ファイル管理プラットフォームを確立することがトレンドになっています。この記事で紹介するオンライン ファイル管理プラットフォームは、PHP と AngularJS をベースにしており、ファイルのアップロード、ダウンロード、編集、削除などの操作を簡単に実行でき、ファイル共有、検索、検索などの一連の強力な機能を提供します。

AngularJS の基本の紹介 AngularJS の基本の紹介 Apr 21, 2018 am 10:37 AM

この記事の内容は AngularJS の基本的な入門に関するもので、必要な友人に共有します。

フロントエンド開発に PHP と AngularJS を使用する方法 フロントエンド開発に PHP と AngularJS を使用する方法 May 11, 2023 pm 05:18 PM

インターネットの普及と発展に伴い、フロントエンド開発の重要性がますます高まっています。フロントエンド開発者として、私たちはさまざまな開発ツールとテクノロジーを理解し、習得する必要があります。その中でも、PHP と AngularJS は非常に便利で人気のあるツールです。この記事では、これら 2 つのツールをフロントエンド開発に使用する方法を説明します。 1. PHP の概要 PHP は、人気のあるオープン ソースのサーバー側スクリプト言語であり、Web 開発に適しており、Web サーバーやさまざまなオペレーティング システム上で実行できます。 PHP の利点は、シンプルさ、スピード、利便性です。

See all articles