2016-05-04 2 views
1

私はセクション1.5で鋭いままであるコードスクールの例を見ています。 HERESにコード:コントローラの変数を "this"に等しく設定するのはなぜですか?

angular.module('NoteWrangler') 
.controller('NotesIndexController', function($http) { 
    var controller = this; 
    $http({method: 'GET', url: '/notes'}).success(function(data){ 
     controller.notes = data; 
    }) 
}); 

私は[この]にMozillaの開発者向けネットワークガイドを読んで、[1]が、私の理解はまだ素晴らしいではありません。

上記の例の次の行にあります。

var controller = this; 

なぜコントローラをこれに設定していますか?なぜただvarコントローラを持っていないのですか?またはこれをこれと同じに設定してグローバル変数にします。そうでない場合は、コントローラで宣言されているローカルコントローラ変数ではなく成功コールバックでのみ変更します。それは任意の手掛かりを提供する場合

彼らは、後にHTMLで次の手順を実行します。controllerAs構文を使用している場合thisに変数を設定する

<div class="note-wrapper"> 
    <a class ="card-notes" ng-repeat="notes in indexController.notes"> 
    </a> 
</div> 

答えて

2

なぜばかりではないのですか?

controllerundefinedとなるためです。

var controller; 
 
document.querySelector('pre').innerHTML = controller;
<pre></pre>

これに等しいことグローバル変数

あなたはグローバル変数を作成していないが、あなたはclosed over変数を作成している作り、それを設定することです。これは、コールバックでその値を使用できることを意味します。その値をコールバックで使用するには、クロージャ変数を作成するか、関数をバインドする必要があります。

var controller = { 
 
    hello: 'world' 
 
}; 
 

 
// Just so we have to use a callback 
 
setTimeout(function() { 
 
    console.log(this); 
 
}, 0); 
 

 
// Using a closure variable 
 
setTimeout(function() { 
 
    console.log(controller); 
 
}, 0); 
 

 
// Binding a function 
 
setTimeout(function() { 
 
    console.log(this); 
 
}.bind(controller), 0);

2

は、新しい名前空間を追加することができます。

function OneCtrl() { 
    this.notes = "foo"; 
} 

function TwoCtrl() { 
    this.notes = "bar"; 
} 

HTMLは:

<div ng-controller="OneCtrl as ctrl1"> 
    {{ctrl1.notes}} 
    <div ng-controller="TwoCtrl as ctrl2"> 
     {{ctrl2.notes}} 
    </div> 
</div> 

controllerAsがなければ、あなたは実際には悪い習慣である、$parentの使用をしなければならないと思います。イメージングは​​$parent.$parent.$parent.$parent.someValueを使用する必要があります。

さらに読書:http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/07/02/exploring-angular-s-controller-as-syntax-and-the-vm-variable.aspx

1

はこれに等しいだけの独自のローカルコントローラ変数ではないコントローラで宣言されたものを変えることになるの成功コールバックにそれ以外の場合は、グローバル変数作り、それを設定することですか?

thisの値は、関数の呼び出し方法によって異なります。

新しい機能が追加されたときに、新しい値がthisになりました。

変数を別の変数に格納するということは、内部関数がその変数の値を読み取ることができることを意味します(同じthisへのアクセス権がないため)。

これはグローバルなものではなく、より広い範囲の変数です。

関連する問題