我如何在 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
});
}
}
//...
}
我想在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
});
}
}
//...
}