Как использовать jQuery в AngularJS
Я пытаюсь использовать простой интерфейс jQuery. Я включил все и у меня есть этот простой скрипт:
<script>
$(function() {
$( "#slider" ).slider();
});
</script>
и
<div id="slider"></div>
мой включает в себя:
<script type="text/javascript" src="js/jquery-1.10.2.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.10.4.custom.min.js"></script>
<script type="text/javascript" src="js/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="js/ayaSlider.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="js/angular-route.min.js"></script>
<script type="text/javascript" src="js/app.js"></script>
но когда я открываю страницу нет слайдера. Согласно документации угловой:
если jQuery доступен, угловой.элемент-это псевдоним для jQuery
функция. Если jQuery недоступен, угловой.делегаты элемента к
Угловое встроенное подмножество jQuery.
однако, я действительно не понимаю, как я могу использовать angular.element и нет никакого примера.
обновление: мне удалось ползунок на экране, но он не работает, я не могу изменить значения или что-то с ней.

4 ответов:
В идеале вы бы поместили это в директиву, но вы также можете просто поместить ее в контроллер. http://jsfiddle.net/tnq86/15/
angular.module('App', []) .controller('AppCtrl', function ($scope) { $scope.model = 0; $scope.initSlider = function () { $(function () { // wait till load event fires so all resources are available $scope.$slider = $('#slider').slider({ slide: $scope.onSlide }); }); $scope.onSlide = function (e, ui) { $scope.model = ui.value; $scope.$digest(); }; }; $scope.initSlider(); });директивный подход:
HTML
<div slider></div>JS
angular.module('App', []) .directive('slider', function (DataModel) { return { restrict: 'A', scope: true, controller: function ($scope, $element, $attrs) { $scope.onSlide = function (e, ui) { $scope.model = ui.value; // or set it on the model // DataModel.model = ui.value; // add to angular digest cycle $scope.$digest(); }; }, link: function (scope, el, attrs) { var options = { slide: scope.onSlide }; // set up slider on load angular.element(document).ready(function () { scope.$slider = $(el).slider(options); }); } } });Я бы также рекомендовал проверить исходный код Angular Bootstrap: https://github.com/angular-ui/bootstrap/blob/master/src/tooltip/tooltip.js
вы также можете использовать фабрику для создания директива. Это дает вам максимальную гибкость для интеграции сервисов вокруг него и любых зависимостей, которые вам нужны.
Это должно работать. Пожалуйста, взгляните на эта скрипка.
$(function() { $( "#slider" ).slider(); });//Links to jsfiddle must be accompanied by codeубедитесь, что вы загружаете библиотеки в следующем порядке: jQuery, jQuery UI CSS, jQuery UI, AngularJS.
вы должны сделать привязку в директиве. Посмотрите на это:
angular.module('ng', []). directive('sliderRange', function($parse, $timeout){ return { restrict: 'A', replace: true, transclude: false, compile: function(element, attrs) { var html = '<div class="slider-range"></div>'; var slider = $(html); element.replaceWith(slider); var getterLeft = $parse(attrs.ngModelLeft), setterLeft = getterLeft.assign; var getterRight = $parse(attrs.ngModelRight), setterRight = getterRight.assign; return function (scope, slider, attrs, controller) { var vsLeft = getterLeft(scope), vsRight = getterRight(scope), f = vsLeft || 0, t = vsRight || 10; var processChange = function() { var vs = slider.slider("values"), f = vs[0], t = vs[1]; setterLeft(scope, f); setterRight(scope, t); } slider.slider({ range: true, min: 0, max: 10, step: 1, change: function() { setTimeout(function () { scope.$apply(processChange); }, 1) } }).slider("values", [f, t]); }; } }; });Это показывает вам пример диапазона слайдера, выполненного с помощью пользовательского интерфейса jQuery. Пример использования:
<div slider-range ng-model-left="question.properties.range_from" ng-model-right="question.properties.range_to"></div>
лучший вариант-создать директиву и обернуть туда функции слайдера. Секрет заключается в использовании $ timeout, код jquery будет вызван только тогда, когда DOM будет готов.
angular.module('app') .directive('my-slider', ['$timeout', function($timeout) { return { restrict:'E', scope: true, template: '<div id="{{ id }}"></div>', link: function($scope) { $scope.id = String(Math.random()).substr(2, 8); $timeout(function() { angular.element('#'+$scope.id).slider(); }); } }; }] );
Comments