2016-05-27 10 views
0

新しいバージョンのLaravelを使用し始めました。私はページをスクロールするときにrootScope変数を変更するコードを追加しようとしています。これは私がこれまで持っていたものです。

$onInit(){ 
    this.$rootScope.showTestBanner = true; 
    var $rootScope = this.$rootScope; 

    angular.element(this.$window).bind("scroll", function() { 
     if (this.pageYOffset >= 20) { 
      this.$rootScope.showTestBanner = false; 
     } 
    }); 
} 

これは、$ rootScopeがangular.element内で定義されていないという問題です。 Iveはこれを割り当てようとしましたが、$ rootScopeはangular.elementの外側でバインド関数内で使用できるようになりましたが、データバインディングは機能しているようです。どんな提案も大歓迎です。答えが明白であれば、私は角度1.5とECMA6にはとても新しいです。

答えて

0

新しいES6のラムダ=>の構文を使用して、これの字句値を設定するより良い方法があります。以下のようにラムダを使用するようにコードを変更し、あなたがthisの正しい値を取得します:

thisの値が字句クラスの他のメソッドでは正しく constructor内ではなく、設定されている
$onInit =() => { 
    this.$rootScope.showTestBanner = true; 
    let $rootScope = this.$rootScope; 

    angular.element(this.$window).bind("scroll", function() { 
    if (this.pageYOffset >= 20) { 
     this.$rootScope.showTestBanner = false; 
    } 
    }); 
} 

。したがって、=>を使用するすべてのメソッドを変更する必要があります

+0

矢印の構文は '$ onInit'関数ではなく、スクロールハンドラ内になければなりません(おそらくスクロールが呼び出されるとうまくいくでしょう) – CodingIntrigue

関連する問題