Създавам уеб приложение, използвайки AngularJS, jQuery, HTML, CSS и Bootstrap, и бих искал да избера някои връзки към изображения от моя JSON, който се намира в Apache2 сървър, и да ги използвам, за да изобразя тези изображения в главната си страница . Бих искал също да ги плъзна като във въртележка. За да направя това да работи, се опитвам да използвам iDangero.us Swiper.
Когато избирам изображенията си с 3 разделени div, нямам проблеми. Получавам изображенията си и след това мога нормално да ги плъзгам, както искам. Правя го както е показано по-долу:
Main.html:
<div ng-init="initGetRequestMain()">
<div class="swiper-slide" ng-click="swipers()"
style="{{data.background1}}"></div>
<div class="swiper-slide" ng-click="swipers()"
style="{{data.background2}}"></div>
<div class="swiper-slide" ng-click="swipers()"
style="{{data.background3}}"></div>
<script src="scripts/custom/main/swipers.js"></script>
</div>
Използвам Swiper, за да плъзгам от едно изображение към друго и изглежда, че работи както трябва. Това е плъгин jQuery и можете да видите някои демонстрации на тази връзка.
Swipers.js:
angular.module('swipers', [])
.controller('',[
$(document).ready(function (){
var swiper = new Swiper('.swiper-container',{
direction: 'horizontal',
pagination: '.swiper-pagination',
paginationClickable: true
})
})]);
Json:
"background1":"background-image: url(images/img1.jpg)",
"background2":"background-image: url(images/img2.jpg)",
"background3":"background-image: url(images/img3.jpg)"
mainController.js:
myApp.controller('MainController', ["$scope","$http",
function($scope,$http){
$scope.initGetRequestMain = function(){
$http.get('http://localhost/main.json').success(function(data){
$scope.data=data;
})
}
}]);
Проблемът е, че когато се опитам да използвам ng-repeat
вместо 3 разделени div, вече не мога да ги видя и моят скрипт Swiper се задейства, преди да са напълно заредени. Нямам грешки в моята конзола или в моя JSON (проверен с JSONLint). По-долу добавих 2 екранни снимки на моя изход и в двете ситуации.
Работа с 3 отделни div:
Не работи с ng-repeat:
Това е кодът, в който се опитвам да накарам ng-repeat
да работи, запазвайки същия контролер и същия Swiper скрипт както преди:
Main.html:
<div ng-init="initGetRequestMain()">
<div ng-repeat="slide in data.slides" isLoaded="">
<div class="swiper-slide" style="{{slide.background}}"
ng-click="swipers()"></div>
</div>
<script type="text/javascript-lazy" src="scripts/custom/main/swipers.js"></script>
</div>
mainJson.json:
"slides":[
{"background":"background-image:url('images/img1.jpg')"},
{"background":"background-image:url('images/img2.jpg')"},
{"background":"background-image: url('images/img3.jpg')"}
],
За да заредя изображенията си, преди да задействам скрипта, се опитвам да използвам 2 персонализирани директиви.
isLoaded
ми казва кога е зареден последният ng-repeat
елемент и задава pageIsLoaded = true;
:
myApp.directive('isLoaded', function (){
return{
scope:true,
restrict: 'A', //Attribute type
link: function (scope, elements, arguments){
if (scope.$last === true) {
scope.pageIsReady = true;
console.log('page Is Ready!');
}
}
}
})
gettingTheScript
чака pageIsLoaded = true;
и зарежда скрипта:
myApp.directive('src', function (){
return{
scope:true,
restrict: 'A', //Attribute type
link: function (scope, elements, arguments){
scope.$on(pageIsReady===true, function(){
if (attr.type === 'text/javascript-lazy'){
scope.scriptLink = arguments.src;
}
})
},
replace: true, //replaces our element
template: '{{scriptLink}}'
}
})
Изглежда не решават проблема ми. Също така не мога да видя console.log('page Is Ready!');
, когато правя първия.
Просто имам някои проблеми, когато трябва да задействам скрипт като Swiper, след като страницата се зареди, за да избегна този вид проблеми. Изображенията ми изглеждат без височина. Мисля, че проблемът е причинен от това, че ng-repeat
не се зарежда напълно, преди да задейства моя скрипт.
какво правя грешно Има ли по-добри решения?
onload
на всяко изображение. Така че просто трябва да проверите дали броят на заредените изображения е равен на общия брой изображения, които искате да заредите, и след това да задействате плъзгача. Имах нещо подобно в един от моите проекти. Ако все още имате проблем, уведомете ме и мога да го потърся вместо вас - person Sylvan D Ash   schedule 05.06.2015