2017-02-08 6 views
0

Я пытаюсь получить карусель Bootstrap 4, работающий в моем приложении Angular 2. В частности, я пытаюсь воспроизвести эффект полной ширины here. Я получаю, насколько последний бит, где я должен подключить элемент к карусели:Bootstrap 4 Карусель, работающий в угловом 2? Ошибка: свойство «carousel» не существует в типе «JQuery»

$('.carousel').carousel({ 
 
    interval: 6000, 
 
    pause: "false" 
 
});

При попытке компиляции, я получаю следующее сообщение об ошибке:

Ошибка: Свойство «карусель» не существует на типе «JQuery»

Я знаю, что есть компоненты ng-bootstrap, но я не смог получить там карусель, чтобы быть полностью полной.

Вот мой код (Машинопись, CSS, HTML):

import { Component, OnInit } from '@angular/core'; 
 
import * as $ from 'jquery'; 
 

 
@Component({ 
 
    selector: 'app-home-carousel', 
 
    templateUrl: './home-carousel.component.html', 
 
    styleUrls: ['./home-carousel.component.css'] 
 
}) 
 
export class HomeCarouselComponent implements OnInit { 
 

 
    constructor() { } 
 

 
    ngOnInit() { 
 
    } 
 

 
    setupCarousel(): void { 
 
    var $item = $('.carousel .item'); 
 
    var $wHeight = $(window).height(); 
 
    $item.eq(0).addClass('active'); 
 
    $item.height('400px'); 
 
    $item.addClass('full-screen'); 
 

 
    $('.carousel img').each(function() { 
 
     var $src = $(this).attr('src'); 
 
     var $color = $(this).attr('data-color'); 
 
     $(this).parent().css({ 
 
     'background-image' : 'url(' + $src + ')', 
 
     'background-color' : $color 
 
     }); 
 
     $(this).remove(); 
 
    }); 
 

 
    $(window).on('resize', function(){ 
 
     $wHeight = $(window).height(); 
 
     $item.height($wHeight); 
 
    }); 
 

 
    $('.carousel').carousel({ // <-- ERROR is on the .carousel 
 
     interval: 6000, 
 
     pause: "false" 
 
    });  
 
    } 
 
}
h3 { 
 
    display: inline-block; 
 
    padding: 10px; 
 
} 
 

 
.full-screen { 
 
    background-size: cover; 
 
    background-position: center; 
 
    background-repeat: no-repeat; 
 
    height: 300px; 
 
}
<div id="mycarousel" class="carousel slide" data-ride="carousel"> 
 
    <!-- Indicators --> 
 
    <ol class="carousel-indicators"> 
 
    <li data-target="#mycarousel" data-slide-to="0" class="active"></li> 
 
    <li data-target="#mycarousel" data-slide-to="1"></li> 
 
    <li data-target="#mycarousel" data-slide-to="2"></li> 
 
    <li data-target="#mycarousel" data-slide-to="3"></li> 
 
    <li data-target="#mycarousel" data-slide-to="4"></li> 
 
    </ol> 
 

 
    <!-- Wrapper for slides --> 
 
    <div class="carousel-inner" role="listbox"> 
 
    <div class="item"> 
 
     <img src="https://unsplash.it/2000/1250?image=397" data-color="lightblue" alt="First Image"> 
 
     <div class="carousel-caption"> 
 
      <h3>First Image</h3> 
 
     </div> 
 
    </div> 
 
    <div class="item"> 
 
     <img src="https://unsplash.it/2000/1250?image=689" data-color="firebrick" alt="Second Image"> 
 
     <div class="carousel-caption"> 
 
      <h3>Second Image</h3> 
 
     </div> 
 
    </div> 
 
    <div class="item"> 
 
     <img src="https://unsplash.it/2000/1250?image=675" data-color="violet" alt="Third Image"> 
 
     <div class="carousel-caption"> 
 
      <h3>Third Image</h3> 
 
     </div> 
 
    </div> 
 
    <div class="item"> 
 
     <img src="https://unsplash.it/2000/1250?image=658" data-color="lightgreen" alt="Fourth Image"> 
 
     <div class="carousel-caption"> 
 
      <h3>Fourth Image</h3> 
 
     </div> 
 
    </div> 
 
    <div class="item"> 
 
     <img src="https://unsplash.it/2000/1250?image=638" data-color="tomato" alt="Fifth Image"> 
 
     <div class="carousel-caption"> 
 
      <h3>Fifth Image</h3> 
 
     </div> 
 
    </div> 
 
    </div> 
 

 
    <!-- Controls --> 
 
    <a class="left carousel-control" href="#mycarousel" role="button" data-slide="prev"> 
 
    <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> 
 
    <span class="sr-only">Previous</span> 
 
    </a> 
 
    <a class="right carousel-control" href="#mycarousel" role="button" data-slide="next"> 
 
    <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> 
 
    <span class="sr-only">Next</span> 
 
    </a> 
 
</div>

Вот мой index.html файл:

<!doctype html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>Website</title> 
 
    <base href="/"> 
 

 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" 
 
     integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> 
 
    <link rel="icon" type="image/x-icon" href="favicon.ico"> 
 
</head> 
 
<body> 
 
    <div class="my-fluid-container"> 
 
    <div class="row"> 
 
     <div class="col-md-12 app-container"> 
 
     <app-root>Loading...</app-root> 
 
     </div> 
 
    </div> 
 
    </div> 
 

 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.1/imagesloaded.pkgd.min.js"></script> 
 
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" 
 
      integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" 
 
      integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> 
 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" 
 
      integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> 
 
</body> 
 
</html>

Спасибо за любую помощь!

ответ

0

Ваша проблема в том, что вы не импортировали загрузочный лоток или что вы не импортировали его правильно. В вашем index.html убедитесь, что вы импортируете самозагрузки после JQuery, как это:

<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="crossorigin="anonymous"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css"></script> 

Не вы должны быть в состоянии использовать карусель. ('карусельного').:

+0

Я пробовал это, хотя я считаю, что у меня есть соответствующие ссылки (сначала jquery, затем bootstrap), но это не имело никакого значения. Я до сих пор получаю ошибку машинописного текста выше. Я не уверен, как это поможет с машинописными текстами, но я сделал это. Thanks – Eddie

+0

Можете ли вы разместить свой код, как вы называете карусель? – Deutro

+0

Ну, не в комментарии, я не могу, это слишком долго. Но я в основном скопировал HTML именно из ссылки Codpen, которую я включил в свой оригинальный пост - http://codepen.io/SitePoint/pen/ZbGwqe. Я использую тот же CSS, и я создал функцию setupCarousel, в которую я скопировал все JS из этого Codepen. В нижней части JS есть место, где я вызываю карусель и присоединяю его к элементу, используя имя класса, чтобы выбрать его («.carousel»). Я установил jquery и bootstrap через npm и могу подтвердить, что они установлены правильно. – Eddie

0

Im на одной и той же проблемы прямо сейчас, пытаясь сделать это произошло на мое приложение

https://www.bootply.com/89193

$ карусельного ({// < - ОШИБКА находится на .carousel

Вот что мой index.html выглядит следующим образом:

<html> 
<head> 
    <meta charset="utf-8"> 
    <base href="/"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="icon" type="image/x-icon" href="favicon.ico"> 
    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> 
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" 
      integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.1/imagesloaded.pkgd.min.js"></script> 
</head> 
<body> 
    <app-root> 
     <div class="spinner"> 
      <div class="double-bounce1"></div> 
      <div class="double-bounce2"></div> 
     </div> 
    </app-root> 
</body> 
</html> 

Я думаю, что у меня есть правильный загрузчик и JQuery

0

У меня был тот же вопрос и был в состоянии решить ее путем изменения

import * as $ from 'jquery'; 

в

declare var jQuery: any; 

Похоже, первый создает новый экземпляр JQuery; тогда как второй обращается к глобальному экземпляру, который получил функции бутстрапа (карусель, модальный ... и т. д.), прикрепленный к нему. Вы можете подтвердить это, добавив следующее в свой класс компонентов и переключившись между двумя упомянутыми выше операциями импорта.

console.log($.fn.carousel); 
console.log($.fn.modal); 

Подробнее о объявляют ключевое слово: What does 'declare' do in 'export declare class Actions'?

О заявлении импорта Машинописи: https://www.typescriptlang.org/docs/handbook/modules.html

0

Шага 1. Убедитесь, что у вас есть JQuery и Bootstrap.js упоминались в разделе скриптов углового-кли. JSON

"scripts": [ 
      "../node_modules/jquery/dist/jquery.min.js", 
      "../node_modules/bootstrap/dist/js/bootstrap.min.js" 
     ] 

Шаг 2. В вашем доме-carousel.component.ts сразу после import { Component, OnInit } from '@angular/core'; добавить declare var $:any; так:

import { Component, OnInit } from '@angular/core'; 
declare var $:any; 

Шаг 3. Хотя это и не обязательно, но я считаю, что безопаснее поставить JQuery и JS код внутри ngOnInit() так:

ngOnInit() { 
    $('.carousel').carousel({ 
     interval: 2000 
    }); 
} 

Я надеюсь, что это работает.