2016-04-06 4 views
0

私の問題は、私はこれに関する公式の文書を見つけることができないということです。私はlink function(scope, elem, attrs) {のように、ここで$ Sを省略することはできませんなぜディレクティブコントローラを作成するにはどうすればよいですか?

https://docs.angularjs.org/guide/directiveはuncommentedly

controller: ['$scope', function($scope) {

ことを示唆していますか? controller: ['scope', function(scope) {はエラーになります"Error: [$injector:unpr] Unknown provider: scopeProvider <- scope

ここでの構文は何ですか?

+0

'function($ scope)'の '$ scope 'はエイリアスです。名前を 'function(scope)'に変更することができます。 –

+0

いいえできません。更新された答えを参照してください – Blauhirn

+0

'$ scope'をコードブロック内の' scope'に名前を変更したかどうかは分かりません。以下の作業コードで私の答えをチェックしてください。 –

答えて

2

指令のリンク関数は範囲要素の型シグネチャを有する普通のJavaScript関数であり、属性オブジェクトがその順番になります。引数の周りに反転し、同様に私たちのリンク機能を宣言した場合:

link: function(attr, elem, scope) { 
     console.log(scope) 
    } 

最初のパラメータ(今呼ばれるのattr)STILLスコープオブジェクトになります。

リンク関数とは異なり、コントローラ関数はAngularの注入システムによって呼び出されます。

"$""$scope"は、現在のコンテキストにスコープ値が注入されていることを示します。しかし、スコープへの参照のすべてが依存性注入に基づいているわけではありません。たとえば、$watch, link, and cloningの関数(網羅的なリストではない)では、スコープはその名前に関係なく常に位置引数として渡されます。

あなたはこれらの記事を参照してくださいすることができます $scope vs scope

angular - $scope vs scope

0

$scopefunction($scope)は、依存関係'$scope'の別名です。そこに名前を変更することができます。

Edited Plunkr from the documentation

JSコードの関連部分:

 controller: ['$scope', function(scope) { // "scope" as an alias 
     var panes = scope.panes = []; 

     scope.select = function(pane) { // $scope renamed 
      angular.forEach(panes, function(pane) { 
      pane.selected = false; 
      }); 
      pane.selected = true; 
     }; 

     this.addPane = function(pane) { 
      if (panes.length === 0) { 
      scope.select(pane); // $scope renamed 
      } 
      panes.push(pane); 
     }; 
     }], 
0
  • directive definition objectいわゆるについての公式ドキュメントはAPI Reference for $compileで見つけることができます。

  • directive controller constructor functionは地元の人々$scope$element$attrs$transcludeでの注射です。これらは注入される。したがって、正確な綴りはです。

  • directive controllerからcontroller:function($scope) {}を作成することは、controller:['$scope', function(scope) {}]のように作成することと同じです。

関連する問題