2013-04-03 4 views
3

это мой первый пост здесь, поэтому я надеюсь, что он будет всеобъемлющим.AngularJs + JqueryUI слайдер начальные значения

Я использую AngularJs, и я добавил слайдер JqueryUI, используя угловую директиву. Я нашел много примеров того, как это сделать, но ни один из них не показывает мне, чтобы добавить исходные значения в слайдер из области.

Вот jsfiddle I'created

var testApp= angular.module('testApp',['ngResource']); 

testApp.factory('remoteRequest', function($resource) { 
var remoteRequest = $resource('/echo/json/'); 
return remoteRequest; 
}); 

testApp.directive('sliderDays', function() { 
return { 
    link: function(scope, elem,attrs) { 
     $(elem).slider({ 
      range: true, 
      min: scope.days[1], 
      max: scope.days[scope.days.length-1], 
      values: [scope.days[0], scope.days[1]], 
      slide: function(event, ui) { 
       console.log(ui.values[ 0 ] +" "+ ui.values[ 1 ]    ); 
      } 
     }); 
    } 
} 
}); 

function TestCtrl($scope, $resource, remoteRequest) 
{ 
$scope.prova=1; 
$scope.days=[]; 
var ret= remoteRequest.get(function(){ 
    $scope.days=[1,2,3,4,5,10,25]; 
}); 
} 

Любой вид помощи будет оценено, спасибо!

ответ

2

Вот рабочая скрипка из вашего кода, я добавил комментарии в местах, которые я изменил. Одна из основных проблем, с которыми вы столкнулись, заключалась в том, что вы пытались получить доступ к элементам массива от scope.days до того, как у него были какие-либо данные.

Fiddle

http://jsfiddle.net/ntaUJ/24/

Посмотреть

<div ng-app="testApp"> 
    <div ng-controller="TestCtrl"> 
     <p><span>{{days[0]}}</span> - <span>{{days[days.length-1]}}</span></p> 
     <div slider-days days="days"></div> 
    </div> 
</div> 

Код

var testApp= angular.module('testApp',['ngResource']); 

testApp.directive('sliderDays', function() { 
    return { 
    link: function(scope, elem,attrs) { 
     $(elem).slider({ 
     range: true, 
     min: scope.days[1], 
     max: scope.days[scope.days.length-1], 
     values: [scope.days[0], scope.days[scope.days.length-1]], 
     slide: function(event, ui) { 
      console.log(ui.values[0], ui.values[1]); 
     } 
     }); 
    } 
    } 
}); 

function TestCtrl($scope) 
{ 
    $scope.days=[1,2,3,4,5,10,25]; 
} 
+0

Хорошо, но wath, если мне нужно загрузить данные после удаленного запроса, как это было в моем примере? Есть другой способ, или я просто ошибался в использовании такой директивы? – Akallabeth

+0

Цифры дайджеста углового должны обновлять информацию, которую вы отправляете в вашу директиву. Вам просто нужно добавить некоторые проверки программ. Вы также можете посмотреть настройку двусторонней привязки данных к изолированной области для директивы, такой как 'scope: {days:" = "}' (ознакомьтесь с http://docs.angularjs.org/guide/directive для получения дополнительной информации на том). Если его одноразовый вызов для данных, вы можете разрешить эту информацию, которая сделает так, чтобы у вас были данные перед визуализацией представления (подробнее об этом здесь http://docs.angularjs.org/api/ng. $ routeProvider (искать свойство разрешения) – Justen

+0

Я решил использовать контроллер «ui-if» с угловым ui, как указано в этом сообщении, [ссылка] http://stackoverflow.com/questions/12353549/preventing-image- from-rendering-in-angularjs Спасибо! – Akallabeth

Смежные вопросы