我如何在 Angular 2 的根页面中添加任何 jquery 插件?

How can I any jquery plugin in root page on Angular 2?

我想在Angular 2 的路由页面中做一个图像滑块。我插入了flexslider 和bootstrap carousel,但我没有这样做。我该怎么做?

我的路由页面代码是

import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';
import { ProviderMain } from '../provider/provider';
import { ActivatedRoute } from '@angular/router';
import * as $ from 'jquery';





@Component({
    selector: 'detail',
    templateUrl: '/app/detail/detail.html',
    providers: [ProviderMain],


})

export class Detail
{
    public link: any;
    public mainData: any;
    public bookingInformation: Array<any>;
    public detail: Array<any>;
    public information: any;
    public itemImages: Array<any>;

    private NextPhotoInterval: number = 5000;
    //Looping or not
    private noLoopSlides: boolean = true;
    //Photos
    constructor(public http: Http, public routePrm: ActivatedRoute, public provide: ProviderMain)
    {
        console.log("Detail Html Başladı");
        this.routePrm.params.subscribe(params => {
            this.link = params["link"];
            this.getDetail(this.link);
        });

    }
    ngAfterViewInit() {

    }
    getDetail(link: any) {
        this.provide.getServiceDetailInformation(link).then(data => {
            this.bookingInformation = data.bookingInformation;
            this.detail = data.detail;
            this.information = data.information[0];
            this.itemImages = data.itemImages;
        });
    }



}

我的 html 代码是

  <div id="slider" class="flexslider">
                    <ul class="slides">
                        <li>
                            <img src="assets/images/holiday-slide3.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-slide4.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/slide15.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-slide3.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-slide4.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/slide15.jpg" alt="cruise">
                        </li>
                    </ul>
                </div>
                <div id="carousel" class="flexslider">
                    <ul class="slides">
                        <li>
                            <img src="assets/images/holiday-thumb3.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-thumb4.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-thumb5.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-thumb3.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-thumb4.jpg" alt="cruise">
                        </li>
                        <li>
                            <img src="assets/images/holiday-thumb5.jpg" alt="cruise">
                        </li>
                    </ul>
                </div>  

如果我平时使用的插件是

 $(document).ready(function () {
        $('#carousel').flexslider({
            animation: "slide",
            controlNav: false,
            animationLoop: false,
            slideshow: false,
            itemWidth: 150,
            itemMargin: 5,
            asNavFor: '#slider'
        });

        $('#slider').flexslider({
            animation: "slide",
            controlNav: false,
            animationLoop: false,
            slideshow: false,
            sync: "#carousel"
        });
    });

Bu 那不是 work.How 我可以这样做吗? 谢谢大家。

注意@Liam 的警告并尽可能避免这种情况。谨慎使用...

在您的模板中,添加对 flexslider 元素的引用:

<div #slider id="slider" class="flexslider">
    <!-- ... -->
</div>
<div #carousel id="carousel" class="flexslider">
    <!-- ... -->
</div>

在您的组件中,您可能希望将 ViewChild 和 NgZone 导入到 Angular 之外的 运行 jQuery。在模板视图中创建对元素的引用。然后,您将在 ngAfterViewInit 方法中 运行 您的插件。

import { Component, NgZone, ViewChild } from '@angular/core';
import $ from "jquery";
//...

@Component({
    selector: 'detail',
    templateUrl: '/app/detail/detail.html',
    providers: [ProviderMain]
})
export class Detail {
    @ViewChild('slider') slider;
    @ViewChild('carousel') carousel;

    $carousel: JQuery | any;
    $slider: JQuery | any;

    constructor(
        private zone: NgZone
    ) {}

    //...

    ngAfterViewInit() {
        this.zone.runOutsideAngular(() => {
            this.$carousel = $(this.carousel.nativeElement).flexslider({
                animation: "slide",
                controlNav: false,
                animationLoop: false,
                slideshow: false,
                itemWidth: 150,
                itemMargin: 5,
                asNavFor: this.slider.nativeElement
            });

            this.$slider = $(this.slider.nativeElement).flexslider({
                animation: "slide",
                controlNav: false,
                animationLoop: false,
                slideshow: false,
                sync: this.carousel.nativeElement
            });
        }
    }

    //...
}

Check out this article on Hackernoon for reference