【问题标题】:Property 'slick' does not exist on type 'JQuery<HTMLElement>'类型 'JQuery<HTMLElement>' 上不存在属性 'slick'
【发布时间】:2018-09-03 22:05:56
【问题描述】:

我有一个 Angular 6 项目,我想使用 Slick Slider。首先我安装了jQuery

npm i jquery

然后是光滑的轮播

npm 我光滑的轮播

然后我对我的 angular.json 文件进行了必要的编辑

"styles": [
 "node_modules/bootstrap/dist/css/bootstrap.min.css",
 "node_modules/font-awesome/css/font-awesome.css",
 "node_modules/slick-carousel/slick/slick.css"

],
 "scripts": [
 "node_modules/jquery/dist/jquery.min.js",
 "node_modules/slick-carousel/slick/slick.min.js"
]

然后我创建一个简单的滑块布局

<div class="mySlider">
  <div><h3>1</h3></div>
  <div><h3>2</h3></div>
  <div><h3>3</h3></div>
  <div><h3>4</h3></div>
  <div><h3>5</h3></div>
  <div><h3>6</h3></div>
</div>

在我的打字稿中,首先我从 jquery 导入 *。

import * as $ from 'jquery';

最后,我在 ngOnInit 中调用了 slick 方法

  ngOnInit() {
    $(document).ready(function() {
      $('.mySlider').slick({
        infinite: true,
        slidesToShow: 3,
        slidesToScroll: 3
      });
    });
  }

当我尝试编译时,我收到以下错误消息:

src/app/components/slider/slider.component.ts(20,22) 中的错误:错误 TS2551:“JQuery”类型上不存在属性“slick”。 您是说“点击”吗?

所以我尝试将 slick 声明为文件顶部的变量。

declare var slick: any;

但这没有帮助。所以我尝试像使用 jQuery 一样创建导入。

import * as slick from 'slick-carousel';

但这只会在尝试编译时给我以下错误消息:

src/app/components/slider/slider.component.ts(3,24) 中的错误:错误 TS2306:文件 'D:/developement/DDI World Front End/DDIWorld_frontEnd/node_modules/@types/slick-carousel/index.d.ts' 不是模块。

我不确定还可以尝试什么或我做错了什么。谢谢你的帮助。

这是我完整的slider.component.ts

import { Component, OnInit } from '@angular/core';
import * as $ from 'jquery';
// import * as slick from 'slick-carousel';
// declare var slick: any;



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



  constructor() { }

  ngOnInit() {
    $(document).ready(function() {
      $('.mySlider').slick({
        infinite: true,
        slidesToShow: 3,
        slidesToScroll: 3
      });
    });
  }

}

编辑

这是StackBlitz,但我在那里遇到了不同的错误。

【问题讨论】:

  • Angular 特别声明不建议导入 jquery。它违背了 Angular 的用途。话虽如此,如果您仍然需要 jquery(基于您的其他包,jquery 是一个严重的依赖项,所以您可能会),首先确保 jquery 甚至被加载。要对此进行测试,请尝试console.log($) 以查看它是否记录未定义或函数。如果它记录了一个函数,那么你很高兴。唯一的次要步骤是您需要在组件中声明 jquery,因为 jquery 与 es6 导入完全一致:将其放在顶部 declare const jQuery = $;
  • 如果你把一个简化示例的堆栈闪电放在一起,我可以帮助进一步排除故障
  • 是的,我知道,但是能够使用一些库来依赖 jQuery 对我来说非常重要。我能够通过使用它的 .text() 方法来确认 jQuery 的工作原理。我什至有智能。我添加了一个堆栈闪电战。
  • 如果您尝试在 Angular 项目中使用依赖于 jQuery 的库......不要使用它。或者检查他们是否有不需要 jquery 的 npm
  • declare const $: any; 添加到我的组件文件的顶部至少对我有用。编译没有问题。

标签: javascript jquery angular slick.js


【解决方案1】:

这样导入jQuery:

declare var $: any;

把代码改成这样:

(<any>$('.mySlider')).slick({
    infinite: true,
    slidesToShow: 3,
    slidesToScroll: 3
});

【讨论】:

  • 我的编译错误变成了运行时错误:query__WEBPACK_IMPORTED_MODULE_2__(...).slick is not a function任何想法如何解决这个问题?
【解决方案2】:

是的,@jesser 是对的。

用过这样的东西:

import * as $ from 'jquery';
import * as slick from 'slick-carousel';

..

  // then in function:
  require('../../../node_modules/slick-carousel/slick/slick.js');

  (<any>$('.slider-wrap')).slick({
    dots: true,
    autoplay: true,
    autoplaySpeed: 1000
});

p.s:之前安装 slick carousel 和 jQuery:

npm install jquery@>=1.8.0 --save-dev 
npm i slick-carousel

【讨论】:

  • 有同样的问题,你在函数require('../../../node_modules/slick-carousel/slick/slick.js');中是什么意思如果这是我的函数在哪里插入行 private initSlick(elementId) { $('#' + elementId).slick( {无限:真,slidesToShow:3,slidesToScroll:1,可拖动:假}); }
  • 我的编译错误变成了运行时错误:query__WEBPACK_IMPORTED_MODULE_2__(...).slick is not a function任何想法如何解决这个问题?
猜你喜欢
  • 1970-01-01
  • 2018-03-08
  • 2020-01-17
  • 1970-01-01
  • 2018-06-21
  • 2020-02-16
  • 2020-04-08
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多