2017-05-18 23 views
0

我学习角2,并试图当我试图角二是不给任何包裹透视JS导入萨科Kruchten写的数据透视表中的JS角2应用导入数据透视表JS在角2

错误,但是当我尝试在浏览器中检查相同时它不显示数据透视表。

我可以检查组件是否已创建,但始终为空。我想AfterViewInit应该让我显示表格。

\\ pivot.component.ts

import {Component , Inject, ElementRef, AfterViewInit} from '@angular/core'; 

declare var jQuery:any; 
declare var $:any; 
import 'pivottable/dist/pivot.min.js'; 
import 'pivottable/dist/pivot.min.css'; 
@Component({ 
    selector: 'app-pivot', 
    template: `<div id="pivot"></div>` 
}) 

export class PivotWrapper { 

private el: ElementRef; 
//constructor spelling was incorrect now working fine 
constructor (@Inject(ElementRef)el: ElementRef){ 
    this.el = el; 
} 
ngAfterViewInit(){ 

    if (!this.el || 
     !this.el.nativeElement || 
     !this.el.nativeElement.children){ 
      console.log('cant build without element'); 
      return; 
    } 

    var container = this.el.nativeElement; 
    var inst = jQuery(container); 
    var targetElement = inst.find('#pivot'); 

    if (!targetElement){ 
     console.log('cant find the pivot element'); 
     return; 
    } 

    //this helps if you build more than once as it will wipe the dom for that element 
    while (targetElement.firstChild){ 
     targetElement.removeChild(targetElement.firstChild); 
    } 

    //here is the magic 
    targetElement.pivot([ 
      {color: "blue", shape: "circle"}, 
      {color: "red", shape: "triangle"} 
     ], 
     { 
      rows: ["color"], 
      cols: ["shape"] 
     }); 
} 

}

\\ app.component.ts

import { Component,ElementRef,Inject} from '@angular/core'; 

declare var jQuery: any; 
import {PivotWrapper} from './pivot.component'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent {} 

\\ app.module.ts

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
import { MaterialModule } from '@angular/material'; 
import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; 
import {NoopAnimationsModule} from '@angular/platform-browser/animations'; 
import { AppComponent } from './app.component'; 
import {PivotWrapper} from './pivot.component'; 

@NgModule({ 
    declarations: [ 
    AppComponent, PivotWrapper 
    ], 
    imports: [ 
    BrowserModule, 
    BrowserAnimationsModule, 
    NoopAnimationsModule, 
    FormsModule, 
    HttpModule, 
    MaterialModule.forRoot() 
    ], 
    providers: [], 
    bootstrap: [AppComponent, PivotWrapper] 
}) 
export class AppModule { } 
+0

我看不到如何使用AfterViewInit。我认为它应该实现并调用buildPivot(),是否正确? – cmonkey

+0

@cmonkey这是一个愚蠢的错误,因为构造函数的拼写错误。 但是现在当我尝试使用'pivotUI'函数时,它给出了渲染错误 – user2881430

回答

0

请参阅下面的解决方案: 我使用角CLI

--package.json

"jquery": "^3.2.1", 
"jquery-ui-dist": "^1.12.1",  
"pivottable": "^2.13.0", 

--angular-cli.json

"styles": [ 
    "../node_modules/pivottable/dist/pivot.min.js", 
    "styles.css" 
    ], 
    "scripts": ["../node_modules/jquery/dist/jquery.min.js", 
    "../node_modules/jquery-ui-dist/jquery-ui.min.js", 
    "../node_modules/pivottable/dist/pivot.min.js" 

    ], 

--app-枢轴包装

import { Component, OnInit,Inject, ElementRef, AfterViewInit } from '@angular/core'; 

import 'pivottable/dist/pivot.min.js'; 
import 'pivottable/dist/pivot.min.css'; 
declare var jQuery:any; 
declare var $:any; 

@Component({ 
selector: 'app-pivot-wrapper', 
templateUrl: './pivot-wrapper.component.html', 
styleUrls: ['./pivot-wrapper.component.css'] 
}) 

export class PivotWrapperComponent implements OnInit { 
private el: ElementRef; 
constructor(@Inject(ElementRef)el: ElementRef) { 
    this.el = el; 

} 

ngOnInit() {  
} 

ngAfterViewInit(){ 

if (!this.el || 
    !this.el.nativeElement || 
    !this.el.nativeElement.children){ 
     console.log('cant build without element'); 
     return; 
} 

    var container = this.el.nativeElement; 
    var inst = jQuery(container); 
    var targetElement = inst.find('#output'); 

    if (!targetElement){ 
    console.log('cant find the pivot element'); 
    return; 
    } 


while (targetElement.firstChild){ 
    targetElement.removeChild(targetElement.firstChild); 
    } 

    //here is the magic 
    targetElement.pivot([ 
     {color: "blue", shape: "circle"}, 
     {color: "red", shape: "triangle"} 
    ], 
    { 
     rows: ["color"], 
     cols: ["shape"] 
    }); 
    } 
} 

--pivot-wrapper.component.html

<div id="output"></div>