2016-06-20 2 views
1

あなたはそれを使用して機能するために、特定のディレクティブコントローラを必要とするという角度指令を伝えることができます:ディレクティブコントローラの必要と同様のルートコントローラを必要とする方法はありますか?

function SomeDirective() { 
    return { 
     require: "someOther", 
     link: function (scope, elem, attrs, someOtherCtrl) { 
      someOtherCtrl.doSomething(); 
     } 
    }; 
} 

function SomeOtherDirective() { 
    return { 
     controller: "someOtherCtrl" 
    }; 
} 

function SomeOtherCtrl() {} 
SomeOtherCtrl.prototype = { 
    doSomething: function() { 
     console.log("Something"); 
    } 
} 

angular.module("some", []) 
    .directive("some") 
    .directive("someOther") 
    .controller("someOtherCtrl"); 

をしかし、私は$ routeProviderを使用して、ルートレベルで固定されたコントローラを必要としたいと思います:

$routeProvider.when("/some", { 
    templateUrl: "./some.html", 
    controller: "someOtherCtrl" 
}); 

それはでsomeOtherCtrlへのアクセスを取得する必要があり/someページ上でインスタンスを取得しますディレクティブを伝えるためにいくつかの方法があります210属性?

私は私がしている場合は、私は他の何らかのの機能を分離し、コンポーネントのそれをより作ることができることを理解するのではなく、私は、ルート・ページ上のコンポーネントとして他の何らかののインスタンスを聞かせルートコントローラとコンポーネント、ネストされた要素SomeOther、それが動作する必要があることを伝えてください。

答えて

2

ルートコントローラではない通常のコントローラであり、ngViewディレクティブで定義されていないので、s not possible to require them, but it is possible to fetch it from directive element I:

var routeController = $element.data('$ngControllerController'); 

これは、ルートコントローラとの相互作用の広範囲な方法ではなく、その欠点を持っている - ディレクティブテストすることは難しく、ビューの外側では使用できなくなります。

より一般的で堅実な選択肢は、バインディングとスコープイベントです。

関連する問題