Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将clipboard.js与Angular 2和Webpack一起使用_Javascript_Angular_Webpack - Fatal编程技术网

Javascript 将clipboard.js与Angular 2和Webpack一起使用

Javascript 将clipboard.js与Angular 2和Webpack一起使用,javascript,angular,webpack,Javascript,Angular,Webpack,我尝试按照此线程在Angular 2上使用剪贴板中的复制文本: 使用此库: 不幸的是,这不起作用,我在控制台上遇到以下错误: 异常:未捕获(承诺中):错误:./MyComponent类MyComponent-内联模板中的错误:3:12由以下原因引起:剪贴板_1。默认值不是构造函数 首先,我通过npm安装了剪贴板脚本: npm install clipboard --save 它在node_模块中显示得很好,然后我将它放在webpack.vendor.js中 var webpack = req

我尝试按照此线程在Angular 2上使用剪贴板中的复制文本: 使用此库:

不幸的是,这不起作用,我在控制台上遇到以下错误:

异常:未捕获(承诺中):错误:./MyComponent类MyComponent-内联模板中的错误:3:12由以下原因引起:剪贴板_1。默认值不是构造函数

首先,我通过npm安装了剪贴板脚本:

npm install clipboard --save 
它在node_模块中显示得很好,然后我将它放在webpack.vendor.js中

var webpack = require('webpack');
module.exports = {
    entry: {
        'vendor': [
            './src/main/webapp/app/vendor',
            '@angular/common',
            '@angular/compiler',
            '@angular/core',
            '@angular/forms',
            '@angular/http',
            '@angular/platform-browser',
            '@angular/platform-browser-dynamic',
            '@angular/router',
            '@ng-bootstrap/ng-bootstrap',
            'angular2-cookie',
            'angular2-infinite-scroll',
            'jquery',
            'clipboard',
            'ng-jhipster',
            'ng2-webstorage',
            'rxjs'
        ]
    },resolve: {
        extensions: ['.ts', '.js'],
        modules: ['node_modules']
    },
    module: {
        exprContextCritical: false,
        rules: [
            {
                test: /(vendor\.scss|global\.scss)/,
                loaders: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader']
            },
            {
                test: /\.(jpe?g|png|gif|svg|woff|woff2|ttf|eot)$/i,
                loaders: [
                    'file-loader?hash=sha512&digest=hex&name=[hash].[ext]', {
                        loader: 'image-webpack-loader',
                        query: {
                            gifsicle: {
                                interlaced: false
                            },
                            optipng: {
                                optimizationLevel: 7
                            }
                        }
                    }
                ]
            },
            {
                // utile pour charger les fichiers .css
                test: /\.css$/,
                loaders: ['style-loader', 'css-loader']
            }
        ]
    },
    output: {
        filename: '[name].dll.js',
        path: './target/www',
        library: '[name]'
    },
    plugins: [
        new webpack.DllPlugin({
            name: '[name]',
            path: './target/www/[name].json'
        })
    ]
};
脚本在目标文件vendor.dll.js中显示良好

然后,我创建了我的指令:

import { Directive, ElementRef, Input, Output, EventEmitter } from '@angular/core';
import { Clipboard } from 'clipboard';

@Directive({
  selector: '[clipboard]'
})
export class ClipboardDirective {
  clipboard: Clipboard;

  @Input('clipboard')
  elt:ElementRef;

  @Output()
  clipboardSuccess:EventEmitter<any> = new EventEmitter();

  @Output()
  clipboardError:EventEmitter<any> = new EventEmitter();

  constructor(private eltRef:ElementRef) {
  }

  ngOnInit() {
    this.clipboard = new Clipboard(this.eltRef.nativeElement, {
      target: () => {
        return this.elt;
      }
    });

    this.clipboard.on('success', (e) => {
      this.clipboardSuccess.emit();
    });

    this.clipboard.on('error', (e) => {
      this.clipboardError.emit();
    });
  }

  ngOnDestroy() {
    if (this.clipboard) {
      this.clipboard.destroy();
    }
  }
}
然后将其导入其他模块:

import { SharedModule } from '../../../../shared';
@NgModule({
    imports: [
        SharedModule
    ],
    declarations: [
        MyComponent
    ],
    providers: [
    ],
    exports: [
            ]
})
export class MyModule { }
要最终在MyComponent中使用它,请与MyModule相对应:

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `
   <div>
        <input  #foo/>
        <button [clipboard]="foo" (clipboardSuccess)="onSuccess()">Copy</button>
      </div>
  `
})
export class AppComponent { 
  onSuccess() {
    console.log('on success');
  }
}
从'@angular/core'导入{Component};
@组成部分({
选择器:“我的应用程序”,
模板:`
复制
`
})
导出类AppComponent{
onSuccess(){
console.log('on success');
}
}

知道我遗漏了什么吗?

在这个问题上,有人构建了一个包装器指令,以便于实现。只需使用ngx剪贴板:简单多了,谢谢!
import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `
   <div>
        <input  #foo/>
        <button [clipboard]="foo" (clipboardSuccess)="onSuccess()">Copy</button>
      </div>
  `
})
export class AppComponent { 
  onSuccess() {
    console.log('on success');
  }
}