Я пытаюсь расширить функциональность любой директивы, просто привязывая директиву атрибута, но мне не удается получить область действия элемента, на котором определен атрибут.Получить область видимости элемента из директивы атрибута
К примеру, у меня есть этот шаблон:
<div class="flex-item-grow flex-item flex-column report-area">
<sv-report sv-reloadable id="reportId"></sv-report>
</div>
Здесь sv-reloadable
имеет неявное понимание sv-report
, но sv-report
не имеет ни малейшего представления о о sv-reloadable
.
Я определил 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 */
});
}
};
});
Теперь $scope
в sv-reloadable
является родитель сфера sv-report
. Я хочу sv-reloadable
, чтобы иметь возможность подключить слушателя к области sv-report
и изменить свойства этой области. Я понимаю, что можно захватить возможности братьев и сестер, но это создает проблемы при попытке выяснить, к какому элементу он привязан.
я попытался следующее:
link: function(scope, element, attrs) {
ele = element;
var actualScopyThingy = element.scope();
},
который я имел считать бы мне сферу элемента атрибут был определен, но, увы, она по-прежнему возвращает родительского объема элемента ,
Если это важно, sv-report
определяется как ниже, но я хотел бы быть в состоянии держать его же (так как sv-reloadable
собирается быть прикреплены к различным элементам, все из которых обязательно имеют viewModel
определены на их объем)
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);
}
};