Я создаю ползунок диапазона, который будет использоваться в панели поиска. Мне нужно вернуть значения, установленные ползунком, чтобы его можно было применить в модели поиска для дальнейшего использования. У меня есть функция обратного вызова в моей директиве, и хотя она правильно вызывает функцию контроллера, данные не передаются. Любые предложения принимаются
Моя директива:
MyCompany.directive('rangeSlider', [ function() {
var sliderTemplate = "<div>" +
"<div id='{{rangeData.slider}}'></div>" +
"<input id='{{rangeData.lowerId}}' " +
" type='text' " +
" class='span1 text-center'/>" +
" <div class='middle-marker'>to</div>" +
"<input id='{{rangeData.upperId}}' " +
" type='text' " +
" class='span1 text-center pull-right'/>" +
"</div>";
return {
restrict: 'A',
replace: true,
template: sliderTemplate,
scope: {
saveRangeData: '&'
},
link: function ( scope, element, attrs ) {
scope.rangeData = [];
scope.rangeData.slider = attrs.slider;
scope.rangeData.lowerId = attrs.lowerId;
scope.rangeData.lowerRange = attrs.lowerRange;
scope.rangeData.upperId = attrs.upperId;
scope.rangeData.upperRange = attrs.upperRange;
scope.$watch( element, function(){
$( "#" + scope.rangeData.slider ).slider({
range: true,
min: Number( scope.rangeData.lowerRange ),
max: Number( scope.rangeData.upperRange ),
values: [ Number( scope.rangeData.lowerRange ), Number( scope.rangeData.upperRange ) ],
slide: function( event, ui ) {
$( "#" + scope.rangeData.lowerId ).val( ui.values[ 0 ] );
$( "#" + scope.rangeData.upperId ).val( ui.values[ 1 ] );
scope.saveRangeData({ data: scope.rangeData });
}
});
}
};
}]);
Вот моя функция контроллера:
$scope.saveRangeValues = function( rangeData ) {
console.log( "saveRangeValues called " );
console.log( rangeData );
};
И HTML, в котором вызывается директива:
<div class="cc-slider span4 pull-right kurz"
name="val-acc-score"
data-range-slider
data-slider="val-acc-score-slider"
data-lower-id="lower-val-acc-score"
data-lower-range="0"
data-upper-id="upper-val-acc-score"
data-upper-range="10"
save-range-data="saveRangeValues( rangeData )"></div>
Как я сказал ранее, функция вызывается и console.log
запускается, но объект rangeData полностью пуст. И да, я проверил, есть ли у rangeData содержимое в директиве.
В очередной раз благодарим за помощь.