2

私は数週間 Angular を試してきましたが、$scope サービスで採用されている魔法を理解していないことに少し悩んでいます。$scope サービスを使用してモデル/ビューを更新するコントローラーを作成することに成功し、同じことを行う独自のディレクティブを作成することができました。

すごい!$scope サービスの内部で何が起こっているのかわかりません。次のようなものを作成すると、$scope.newproperty に割り当てを行うと実際に何が起こっているのでしょうか? $scope サービスに固有のドキュメントは見つかりませんでした。

module.controller("menu_ctrl",['$scope','$http',function($scope,$http){
    $scope.newproperty = "Bound to model!" //magic!
}]);

さらに、ディレクティブ内に新しいリンク関数を作成すると (以下の例)、突然、変数を使用してスコープにアクセスできるようになるのはなぜですか? $scope または $apply サービスを使用すると何らかの魔法がかかると思いますが、推測するしかありません。ここで何か助けていただければ幸いです。ありがとう!

srvcs.directive('directiv', ['$http',function($http) {
   var returnObj = {
   link: function linkfn(scopeVar, instance, attr){
      console.log(scopeVar);
      scopeVar.newproperty = "Also bound to model!" //more magic!
      ...
      ...
      }
   };
   return returnObj;
 }]);
4

1 に答える 1

5

$scopeそれ自体はサービスではありません。これは、アプリケーションのルート スコープの単なる子スコープです。したがって、$rootScope サービスのドキュメントを確認する必要があります。

技術的に言えば、スコープはプロトタイプとして継承されるオブジェクトであり、メソッド$rootScopeを使用して作成されます。$newオブジェクトなので、 を実行するだけで新しいプロパティを作成できます$scope.property = value;。内部に getter/setter メソッドはありません。それをよりよく理解するにfunction $RootScopeProvider()は、Angular のソース コードを調べる必要があります。

また、スコープは単なるオブジェクトであるlinkため、コントローラーで行うのと同じ方法で、ディレクティブ内の関数でスコープにアクセスできます。魔法は必要ありません。:)

について$applyは、サービスでもなく、サービスの方法です$rootScope。Angular が現在のスコープとその子のウォッチャーを処理するためにダイジェスト サイクルをトリガーするだけです。

最後に、 Angular scopesの理解に関するこの記事をまだ読んでいない場合は、興味があるかもしれません。:)

于 2013-08-17T20:25:04.660 に答える