2017-01-10 9 views
0

角度es6でアプリケーションを開発しようとしています。私は監督に問題があります。 は、ここでの問題は、私は、コンストラクタ内のロール値を得ることができなかったです私のコードangularJS ES6指令

export default class RoleDirective { 
    constructor() { 
    this.template=""; 
    this.restrict = 'A'; 
    this.scope = { 
     role :"@rolePermission" 
    }; 

    this.controller = RoleDirectiveController; 
    this.controllerAs = 'ctrl'; 
    this.bindToController = true; 
    } 

    // Directive compile function 
    compile(element,attrs,ctrl) { 
     console.log("df",this) 
    } 

    // Directive link function 
    link(scope,element,attrs,ctrl) { 

     console.log("dsf",ctrl.role) 
    } 
} 

// Directive's controller 
class RoleDirectiveController { 
    constructor() { 
    console.log(this.role) 
    //console.log("role", commonService.userModule().getUserPermission("change_corsmodel")); 
    //$($element[0]).css('visibility', 'hidden'); 
    } 

} 

export default angular 
    .module('common.directive', []) 
    .directive('rolePermission',[() => new RoleDirective()]); 

です。 は、ここで私は、このコンソール場合は、コントローラオブジェクトを取得します私のhtml実装

<a ui-sref="event" class="button text-uppercase button-md" role-permission="dfsd" detail="sdfdsfsfdssd">Create event</a> 

です。しかし、this.roleを使用している間は結果は得られません。

+0

[この回答](http://stackoverflow.com/a/41524591/2435473)も参照できます。 –

+1

あなたはES5を使ってまったく同じ問題を抱えています。そして、このディレクティブが最初にコントローラーと分離スコープを持つことは意味がありません。 – zeroflagL

答えて

2

わかりましたので、私はこれがどのように機能するか調べることができました。

基本的に、コントローラのコンストラクタでスコープ値を初期化することはできません(これは新しいオブジェクトで最初に実行されるため)。また、バインディングも考慮されます。

あなたのユースケースのお手伝いをすることができ、あなたのコントローラに実装することができますフックがあります:$onInit

class RoleDirectiveController { 
    constructor() { 
    // data not available yet on 'this' - they couldn't be 
    } 

    $onInit() { 
    console.log(this.role) 
    } 
} 

これは動作するはずです。これは、angle1.5 + $ scopeに依存していないときに、モデルを保持するための方法です。スコープを使用する場合は、コントローラのコンストラクタ(注入)でスコープを使用できるためです。

+0

ありがとう、私の日を節約..実際には私はbindtocontrollerを使用しているので、それは自分のスコープの権利ですか?グローバルスコープではありません。 – user3118041

+0

あなたは独立スコープを使用しています(あなたのディレクティブ 'scope'定義のオブジェクトを使って定義されています)。 'bindToController'は何か他のものです - これは基本的に$ scopeオブジェクトの代わりにコントローラオブジェクトを使うように角度を伝えますが、それはいずれかの方法で分離されていました –