Angularjs におけるコントローラーの役割は、ビューを拡張することです。これは、実際にはビュー内のスコープに追加機能を追加するために使用される関数であり、スコープ オブジェクトの初期状態を設定し、カスタム動作を追加します。 。
ページ上にコントローラーを作成すると、Angularjs は $scope を生成してコントローラーに渡します。Angularjs はコントローラーを自動的にインスタンス化するため、コンストラクターを記述するだけで済みます。次の例は、コントローラーの初期化を示しています:
function my Controller($scope){ $scope.msg="hello,world!"; }
上記のコントローラー作成方法はグローバル名前空間を汚染します。より合理的な方法は、次のようにモジュールを作成してから、そのモジュール内にコントローラーを作成することです。
var myApp=angular.module("myApp",[]); myApp.controller("myController",function($scope){ $scope.msg="hello,world!"; })
<div ng-controller="FirstController"> <h4>The simplest adding machine ever</h4> <button ng-click="add(1)" class="button">Add</button> <a ng-click="subtract(1)" class="button alert">Subtract</a> <h4>Current count: {{ counter }}</h4> </div>
app.controller('FirstController', function($scope) { $scope.counter = 0; $scope.add = function(amount) { $scope.counter += amount; }; $scope.subtract = function(amount) { $scope.counter -= amount; }; });
コントローラーのネスト (スコープにスコープが含まれる)
AngularJS アプリケーションのどの部分にも、どのコンテキストでレンダリングされるかに関係なく、親スコープがあります。 ng-app が配置されているレベルの親スコープは $rootScope です。デフォルトでは、AngularJS は現在のスコープでプロパティが見つからない場合、親スコープでプロパティを探します。 AngularJS が対応する属性を見つけられない場合、$rootScope に到達するまで親スコープに沿って上向きに検索します。 $rootScope で見つからない場合、プログラムは引き続き実行されますが、ビューは更新されません。
例を通してこの動作を見てみましょう。ユーザー オブジェクトを含む ParentController を作成し、このオブジェクトを参照する ChildController を作成します。
app.controller('ParentController', function($scope) { $scope.person = {greeted: false}; }); app.controller('ChildController', function($scope) { $scope.sayHello = function() { $scope.person.name = 'Ari Lerner'; }; });
<div ng-controller="ParentController"> <div ng-controller="ChildController"> <a ng-click="sayHello()">Say hello</a> </div> {{ person }} </div>