javascript - 如何在 Angular 4 中使用 SlickGrid(jQuery 遗留库)

标签 javascript jquery angular typescript slickgrid

我正在尝试获取一个名为 SlickGrid 的遗留 jQuery 库。在 Angular 4 中工作,我似乎无法找出最好的方法来做到这一点(我也是 Angular 4 的新手,所以这没有帮助)。到目前为止,我找到了 @types/slickgrid 的 npm 包并安装了它。然后我尝试用这个将它导入到我的组件中

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

但是这会在控制台中引发一些错误

app.component.ts(5,24): error TS2306: File 'C:/demo/node_modules/@types/slickgrid/index.d.ts' is not a module.

我也尝试过使用此导入'slickgrid',但我得到了相同的错误

这是我的完整 component.ts 文件

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

@Component({
    selector: 'my-app',
    template: `<td valign='top' width='50%'>
        <div id='myGrid' style='width:600px;height:500px;'></div>
    </td>`
})
export class AppComponent implements OnInit {

    ngOnInit(): void {
        let grid;
        let columns = [
        {id: 'title', name: 'Title', field: 'title'},
        {id: 'duration', name: 'Duration', field: 'duration'},
        {id: '%', name: '% Complete', field: 'percentComplete'},
        {id: 'start', name: 'Start', field: 'start'},
        {id: 'finish', name: 'Finish', field: 'finish'},
        {id: 'effort-driven', name: 'Effort Driven', field: 'effortDriven'}
        ];
        let options = {
        enableCellNavigation: true,
        enableColumnReorder: false
        };
        let data = [];
        for (let i = 0; i < 500; i++) {
        data[i] = {
            title: 'Task ' + i,
            duration: '5 days',
            percentComplete: Math.round(Math.random() * 100),
            start: '01/01/2009',
            finish: '01/05/2009',
            effortDriven: (i % 5 === 0)
        };
        }
        $(() => {
        grid = new Grid('#myGrid', data, columns, options);
        });
    }
}

还有我导入库的 index.html (如果我能做到这一点,我最终可以使用 WebPack)

    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="styles.css"/>
    <link rel="stylesheet" type="text/css" href="/node_modules/slickgrid-6pac/slick.grid.css"/>
    <link rel="stylesheet" type="text/css" href="/components/css/SlickGrid.css"/>
    </head>
    <body>
        <my-app> Loading... </my-app>
    </body>
    <script src="/node_modules/slickgrid-6pac/lib/jquery-1.11.2.js"></script>
    <script src="/node_modules/slickgrid-6pac/lib/jquery.event.drag-2.2.js"></script>
    <script src="/node_modules/underscore/underscore-min.js"></script>
    <script src="/node_modules/slickgrid-6pac/slick.core.js"></script>
    <script src="/node_modules/slickgrid-6pac/slick.grid.js"></script>
    <!-- Polyfill(s) for older browsers -->
    <script src="/node_modules/core-js/client/shim.min.js"></script>
    <script src="/node_modules/zone.js/dist/zone.min.js"></script>
    <script src="/node_modules/reflect-metadata/Reflect.js"></script>
    <script src="/node_modules/systemjs/dist/system.src.js"></script>
    <script src="/dist/basic_slickgrid_ts/systemjs.config.js"></script>
    <script>
    System.import('app').catch(function(err){ console.error(err); });
    </script>
</html>

我真的需要让它正常工作,但我不知道还能尝试什么。

最佳答案

非常感谢@Rahul Singh,他发表的评论回答了我的问题。按照下面所示的说明,我能够创建一个新的开源库 Angular-Slickgrid现在每个人都可以享受。

安装 Angular-CLI 并修改 angular-cli.json文件

{
  "apps": [
  {
    "styles": [
      "../node_modules/slickgrid/slick.grid.css",
      "styles.css"
    ],
    "scripts": [
      "../node_modules/slickgrid/lib/jquery-1.8.3.js",
      "../node_modules/slickgrid/lib/jquery.event.drag-2.2.js",
      "../node_modules/slickgrid/slick.core.js",
      "../node_modules/slickgrid/slick.grid.js"
    ],    
}

对遗留库进行 npm 安装

npm install slickgrid

添加<div>对于 component.html 中的网格文件

<div id='myGrid' style='width:600px;height:500px;'></div>

最后是component.ts

import { Component, OnInit } from '@angular/core';
import $ from 'jquery/dist/jquery';
import jQuery from 'jquery/dist/jquery';

// using external js modules in Angular
declare var Slick: any;
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'app';

  ngOnInit(): void {
      let grid;
      const columns = [
        {id: 'title', name: 'Title', field: 'title'},
        {id: 'duration', name: 'Duration', field: 'duration'},
        {id: '%', name: '% Complete', field: 'percentComplete'},
        {id: 'start', name: 'Start', field: 'start'},
        {id: 'finish', name: 'Finish', field: 'finish'},
        {id: 'effort-driven', name: 'Effort Driven', field: 'effortDriven'}
      ];
      const options = {
        enableCellNavigation: true,
        enableColumnReorder: false
      };
      let data = [];
      for (let i = 0; i < 500; i++) {
        data[i] = {
          title: 'Task ' + i,
          duration: '5 days',
          percentComplete: Math.round(Math.random() * 100),
          start: '01/01/2009',
          finish: '01/05/2009',
          effortDriven: (i % 5 === 0)
        };
      }
      $(() => {
        grid = new Slick.Grid('#myGrid', data, columns, options);
      });
  }
}

它有效,再次感谢@Rahul

关于javascript - 如何在 Angular 4 中使用 SlickGrid(jQuery 遗留库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46008515/

相关文章:

angular - GET http ://localhost:4200/node_modules/zone. js/dist/zone.js 404(未找到)

angular - 如何将微调器与 *ngFor async 一起使用

javascript - 当存在不使用 'yield' 的函数或类似 'call' 或 'put' 的效果时,如何测试传奇?

javascript - 解析期间发生 fatal error 和 org.xml.sax.SAXParseException

jquery - jQuery css() 方法是否适用于外部样式表?

jQuery CSS 属性名称不一致

arrays - Angular 2 - 从嵌套数组创建 CSV 文件

javascript - 从甜蜜警报对话框中删除 "OK"按钮

javascript - 如何在ajax中发送POST数据?

javascript - 如何删除javascript中的特定元素