AngularJS スコープ(スコープ)



スコープは、HTML (ビュー) と JavaScript (コントローラー) の間のリンクです。

スコープは、使用可能なメソッドとプロパティを持つオブジェクトです。

スコープはビューとコントローラーに適用できます。


スコープの使用方法

AngularJS でコントローラーを作成するとき、パラメータとして $scope オブジェクトを渡すことができます:

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<h1>{{carname}}</h1>

</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.carname = "Volvo";
});
</script>

<p>控制器中创建一个属性名 "carname",对应了视图中使用 {{ }} 中的名称。</p>

</body>
</html>

Run Instance»

「Run Instance」をクリックします「オンラインインスタンスを表示するボタン

コントローラーに$scopeオブジェクトを追加すると、ビュー(HTML)はこれらのプロパティを取得できます。

ビューでは、$scope プレフィックスを追加する必要はありません。{{carname}} などの属性名を追加するだけです。


スコープの概要

AngularJS アプリケーションは以下で構成されます:

  • View (ビュー)、つまり HTML。

  • Model (モデル)、現在のビューで利用可能なデータ。

  • Controller(コントローラー)はJavaScriptの関数であり、プロパティを追加・変更することができます。

スコープがモデルです。

スコープは、ビューとコントローラーで使用できるプロパティとメソッドを備えた JavaScript オブジェクトです。

インスタンス

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<input ng-model="name">

<h1>我的名字是 {{name}}</h1>

</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.name = "John Doe";
});
</script>

<p>当你修改输入框中的值时,会影响到模型(model),当然也会影响到控制器对应的属性值。</p>

</body>
</html>

インスタンスの実行 »

オンラインインスタンスを表示するには、「インスタンスの実行」ボタンをクリックしてください


スコープ スコープ

現在使用しているスコープを理解することが非常に重要です。

上記の 2 つの例ではスコープが 1 つだけなので、比較的簡単に扱えますが、大規模なプロジェクトでは HTML DOM 内に複数のスコープが存在するため、このとき、対応するスコープを把握する必要があります。使用しているスコープはどれですか。

<li> 要素は、文字列に対応し、変数 x で表される現在の繰り返しオブジェクトにアクセスできます。

インスタンス

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<ul>
    <li ng-repeat="x in names">{{x}}</li>
</ul>

</div>

<script>
var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
});
</script>
	
</body>
</html>

インスタンスの実行»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します


ルートスコープ

すべてのアプリケーションには$rootScopeがあり、 すべての HTML 要素に ng -app ディレクティブが含まれています。

$rootScopeはアプリケーション全体に適用できます。これは、各コントローラーのスコープ間のブリッジです。ルートスコープで定義した値は各コントローラーで使用できます。

インスタンス

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<h1>姓氏为 {{lastname}} 家族成员:</h1>

<ul>
    <li ng-repeat="x in names">{{x}} {{lastname}}</li>
</ul>

</div>

<script>
var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope, $rootScope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});
</script>

<p>注意 $rootScope 在循环对象内外都可以访问。</p>

</body>
</html>

インスタンスの実行 »

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します