2017-08-13 36 views
1

我目前正在尝试实现一个Angular指令来管理语义UI下拉菜单。首先,我通过npm使用Angular(4.3.3),jQuery(3.2.1)和Semantic UI(2.2.13)。Angular 4的语义UI下拉

为了整合他们,我已经重新配置的角度,cli.json为了进口这些库:

"scripts": [ 
    "../node_modules/jquery/dist/jquery.min.js", 
    "../node_modules/semantic-ui/dist/semantic.min.js" 
] 

声明语义UI指令:

import {Directive, ElementRef, AfterViewInit} from "@angular/core"; 
import * as jQuery from "jquery"; 

@Directive({ 
    selector: "[sm-dropdown]" 
}) 

export class SemanticDropdownDirective implements AfterViewInit { 

    constructor(private dropdown: ElementRef) {} 

    ngAfterViewInit(): void { 
    jQuery(this.dropdown.nativeElement).dropdown(); 
    } 
} 

,并给它一试:

<div class="ui selection dropdown" sm-dropdown> 
    <i class="dropdown icon"></i> 
    <div class="menu"> 
    <div 
     class="item" 
     *ngFor="let item of [10, 20, 30, 50, 100]" 
     [attr.data-value]="item" 
    > 
     {{ item }} 
    </div> 
    </div> 
</div> 

的问题是,它总是与结束:

ERROR TypeError: WEBPACK_IMPORTED_MODULE_1_jquery(...).dropdown is not a function

我注意到在创建浏览器控制台下拉(抛出错误后)的工作原理:

$('.dropdown').dropdown() 

我已经google一下,并试图很多替代品,但没有成功...

有什么想法?

+0

你安装'jQuery'的打字,也许它搞乱了webpack构建..? –

+0

不,我只是简单地通过npm安装jQuery,这都是 – egeloen

回答

0

试试这个:

import {Directive, ElementRef, AfterViewInit} from "@angular/core"; 
import * as $ from 'jquery'; 

declare var $: any; 

@Directive({ 
    selector: "[sm-dropdown]" 
}) 

export class SemanticDropdownDirective implements AfterViewInit { 

    constructor(private dropdown: ElementRef) {} 

    ngAfterViewInit(): void { 
    $(this.dropdown.nativeElement).dropdown(); 
    } 
} 

Working Plunkar Link

+0

感谢您的回答,但我的代码片段中出现了完全相同的错误。由于组件工作,如果我从浏览器控制台触发它,它听起来像语义没有加载时,当指令事件被触发... – egeloen

+0

@你可以分享片段的网址,它将更容易调试错误 –

+0

你是什么是指通过共享一个网址?一个plnkr? – egeloen