1

ルートに基づいて angular-ui タブを自動的にアクティブにするディレクティブを作成しようとしています。my ディレクティブは、タブセット内のすべてのタブ要素に追加されることを意図しています。

要求しています

require:['rwActiveIfState','^tabset']

私のコンパイル関数では、次のように始まるリンク関数を返しています。

return function LinkingFunction(scope, element, attributes,controllers) {
      controller=controllers[0];
      tabsetCtrl=controllers[1];
...

これtabsetCtrlは、意図したタブセットのコントローラーです。

.selectのメソッドを呼び出したいtabsetCtrl

そのコードは次のようになります。

  ctrl.select = function(selectedTab) {
    angular.forEach(tabs, function(tab) {
      if (tab.active && tab !== selectedTab) {
        tab.active = false;
        tab.onDeselect();
      }
    });
    selectedTab.active = true;
    selectedTab.onSelect();
  };

そして、リンク関数で取得しているスコープパラメーターを渡して呼び出しています。

tab と tabset のコードを見ると、tabsetselectedTabが tab ディレクティブのスコープであると想定していることがわかります。

tabsetCtrl.addTab(scope);これは、タブが呼び出しておりtabsetCtrl、スコープをそのタブ コレクションに追加するという事実からわかります。

  ctrl.addTab = function addTab(tab) {
    tabs.push(tab);
...

タブコントロールが呼び出されますが、それに到達する方法がわかりません。私のディレクティブはタブ要素に適用されるため、これはタブコントロールのスコープと同じスコープであると想定していました。

私の Q は、タブ属性に追加された自分のディレクティブから、タブによって tabsetCtrl に送信されるスコープの同じインスタンスにどのように取得するのですか?

ノート:

selectedTab.onSelect();1)これは、ディレクティブのlinkingFunctionで取得したスコープとまったく同じであると以前は考えていましたが、その場合、「未定義は関数ではありません」という行でエラーが発生する理由がわかりません[つまり、私のディレクティブのスコープである selectedTab には「onSelect」がありません。正しく理解すれば、タブのスコープは、次のように分離されたスコープの減速に基づいて持つ必要があります。

   scope: {
      active: '=?',
      heading: '@',
      onSelect: '&select', //This callback is called in contentHeadingTransclude
                          //once it inserts the tab's content into the dom
      onDeselect: '&deselect'
    },

2)これは、タブディレクティブも定義されているという事実にも関連している可能性がありますが、transclude:true正確にはわかりません。

4

0 に答える 0