Я использую следующий угловой плагин https://github.com/angular-slider/angularjs-sliderAngularJS Оценить директиву атрибутов после директивы Element
Моя цель состоит изменить «легенды», сгенерированные с помощью директивы. Для этого директива получает Array в атрибуте rz-slider-options. Пример:
В контроллере:
angular
.module('exampleApp')
.controller('MyController', Controller);
function Controller() {
var $ctrl = this;
$ctrl.slider = {
value: 1,
options: {
showTicksValues: true,
stepsArray:[{value: 1, legend: 'red'}, {value: 1, legend: 'green'}, {value: 1, legend: 'blue'}, {value: 1, legend: 'red'}]
}
}
}
В HTML:
<div ng-app="exampleApp">
<div ng-controller="MyController as $ctrl">
<rzslider rz-slider-model="slider.value" rz-slider-options="slider.options" ></rzslider>
</div>
</div>
Это будет генерировать следующее:
Моя идея это добавить пользовательскую директиву для изменения некоторые элементы DOM, связанные с этой директивой. Предположим, что моя директива это называется my-directive
, я хочу сделать что-то вроде этого:
angular
.module('exampleApp')
.directive('reds', MenuGeo);
MenuGeo.$inject = ['$timeout'];
function MenuGeo($timeout){
var ddo = {
restrict: 'A',
link: linkFn
};
return ddo;
function linkFn(scope, el, attrs){
var legendsList = el[0].getElementsByClassName('rz-tick-legend');
console.log(legendsList);
}
}
Затем я изменил HTML как это:
<div ng-app="exampleApp">
<div ng-controller="MyController as $ctrl">
<rzslider rz-slider-model="slider.value" rz-slider-options="slider.options" reds></rzslider>
</div>
</div>
Но console.log
моей директивы возвращает []
. Поэтому я думаю, что директива элемента rzslider
продолжает работать, когда моя директива была вызвана.
Мой вопрос: Как добиться того, что моя директива будет оцениваться после того, как будет выполнена вся работа rzslider?
codepen он доступен здесь: http://codepen.io/gpincheiraa/pen/mRBdBy
UPDATE
Я был добиться того, что моя директива получить элементы, но мне нужно, чтобы добавить $timeout
предложение для достижения этой цели. Мои новые вопросы:
Почему моя директива не была оценена после директивы rzslider и как я мог достичь этого без использования $ timeout?
Пожалуйста, проверьте мой обновленное описание. Спасибо –
Я видел ваш обновленный вопрос вместе с вашим примером codepen. Проблема заключается в том, что часть 'el [0]' вычисляется немедленно (и до загрузки DOM). Функции, такие как 'el.children()' и 'el.find()', с другой стороны, выполняются после их загрузки узлов DOM и поэтому могут использоваться вместо 'el [0]' в вашем примере. –
Я думаю, вы можете использовать 'el [0]', но только после того, как DOM загрузился, и для этого он должен быть обернут функцией '$ timeout' или, альтернативно, вы можете использовать JQuery' $ (document) .ready (функция() {..} 'для аналогичного эффекта. –