2016-11-29 11 views
1

ディレクティブをアトリビュートディレクティブを付加するだけで拡張しようとしていますが、アトリビュートが定義されているエレメントのスコープを取得できません。例えばアトリビュートディレクティブから要素スコープを取得

、私はこのテンプレートを持っている:

ここ
<div class="flex-item-grow flex-item flex-column report-area"> 
    <sv-report sv-reloadable id="reportId"></sv-report> 
</div> 

sv-reloadablesv-reportのいくつかの暗黙の理解を持っていますが、全く分からについてsv-reloadablesv-reportありません。

私のようにsv-reloadableを定義しました:今

angular 
    .module('sv-reloadable', [ 
     'sv.services', 
    ]) 
    .directive('svReloadable', function(reportServices, $timeout) { 
     return { 
      restrict: 'A', 
      controller: function($scope, $timeout) { 
       $scope.$on('parameter-changed', function(evt, payload) { 
        evt.stopPropagation(); 
        $scope.viewModel = getNewViewModel(payload);/* hit the server to retrieve new data */ 
       }); 
      } 
     }; 
    }); 

sv-reloadable$scopesv-report範囲です。 sv-reloadableは、リスナーをsv-reportのスコープにアタッチし、そのスコープのプロパティを入れ替えることができるようにしたいと考えています。私はそれが兄弟スコープをつかむことが可能であることを理解していますが、それはそれがどの要素に接続されているかを正確に把握しようとすると問題を引き起こします。

私は次のことを試みた:私はは私の属性は上で定義された要素の範囲を与えるだろうと想定持っていたが、残念ながら、それはまだ要素の範囲を返し

link: function(scope, element, attrs) { 
    ele = element; 
    var actualScopyThingy = element.scope(); 
}, 

それが重要な場合、sv-reportsv-reloadableviewModel定義しておく必要がありますすべてが、多くの異なる要素に装着されようとしているので、(次のように定義されていますが、私は同じそれを維持できるようにしたいのですが周り掘りのビットの後

return { 
    restrict: 'E', 
    replace: true, 
    templateUrl: 'sv-report/sv-report.tpl.html', 
    scope: { 
     id: '=', 
     reportParameters: '=' 
    }, 
    controller: function ($scope, svAnalytics) { 
     /* unrelated code here */ 
    }, 
    link: function(scope, element, attrs) { 
     initialLoadReport(scope); 
    } 
}; 

答えて

1

)その範囲に、isolateScope()は私が)ではなくscope()(後だったものです。 sv-reloadableの指示は次のようになります。

return { 
     restrict: 'A', 
     link: function(scope, element, attrs) { 
      var elementScope = element.isolateScope(); 
      elementScope.$on('parameter-changed', function(evt, payload) { 
       ... 
      }); 
     } 
    }; 
関連する問題