2017-02-15 2 views
4

私はAngular 1.5.7バージョンを使用しています。角度bindToControllerが機能しない、あるコントローラスコープから別のコントローラスコープにオブジェクトをバインドできます

コントローラー名とビュー名を文字列として受け取り、コントローラーをそれぞれ呼び出す指示文があります。

呼び出し元のコントローラに以前のコントローラからユーザー名をバインドできません。以前のコントローラで使用できる値が表示されます。

問題の原因を教えてください。

myApp.directive("pendingRequests", function() { 
    return { 
     restrict: 'E', 
     controller: "@", 
     name: "controllerName", 
     controllerAs: 'pendingReqCtrl', 
     scope: {}, 
     bindToController: { 
      username: '=username' 
     }, 
     templateUrl: function(tElement, tAttrs) { 
      return tAttrs.templateUrl; 
     } 
    }; 
}); 
+0

あなたの質問は分かりませんが、親スコープからコントローラにアクセスしたいと思うようです。この場合、 "require"指示タグはあなたに親コントローラへのアクセスを与えます。 – otaviodecampos

答えて

4

コードを初期化するために$ onInitを試しましたか?

angularjs doc says this

廃止の警告:コントローラのコンストラクタが と呼ばれる前に、非ES6クラスコントローラのバインディング が現在これに拘束されているが、この使用は廃止されます。代わりにコントローラの$ onInitメソッド内のバインディングに依存する初期化コード を置き換えてください。

1.6.2に更新され、コードを$ onInitメソッドに入れて、バインディングにアクセスする必要がありました。

+0

角1.6.2が「ライフサイクルフック」を追加しました。以前のバージョンでは、コントローラのコンストラクタのスコープバインドにアクセスできました。 – otaviodecampos

+0

この非推奨警告は新しいバージョンからはなく、十分な情報が見つかりません。 –

7

ありがとうございました @ westorあなたは私の一日を保存しました。私はちょうど私の角度を更新し、この問題を始め、それを修正するために多くの時間を費やして、それから私はこれを見つけた。いくつかの例を挙げて考えました。 、私はが必要と使用範囲

myApp.directive('pendingRequests', function() { 
    return { 
    scope: { 
     item:'=' 
    }, 
    bindToController: true, 
    controller: controller, 
    controllerAs: 'vm', 
    controller: function ($scope) { 
     console.log(this.item); // doesn't logs 

     this.$onInit = function() { 
     console.log(this.item); // logs your other directives object 
     }; 
    } 
    } 
}); 

を通じて

使用$は私のアプリではスコープ

controller: function() { 
    this.$onInit = function() { 

    // your business logic 

    }; 
}; 

を結合するために、あなたのコントローラ機能にをoninitを結合して

myApp.directive('pendingRequests', function() { 
    return { 
    scope: {}, 
    bindToController: {}, 
    controller: controller, 
    controllerAs: 'pendingReqCtrl', 
    require: { 
     parent: '^otherDirective' 
    }, 
    controller: function ($scope) { 
     console.log(this.parent); // doesn't logs 

     this.$onInit = function() { 
     console.log(this.parent); // logs your item object 
     }; 
    } 
    } 
}); 
関連する問題