有人能告诉我,jQueryAngular怎么用吗?

class MyComponent {
    constructor() {
        // how to query the DOM element from here?
    }
}

我知道有一些变通办法,比如预先操作DOM元素的classid,但我希望有一种更干净的方式来做这件事.

推荐答案

与NG1相比,在Angular2中使用jQuery轻而易举.如果您使用的是TypeScript,您可以首先引用jQuery TypeScript定义.

tsd install jquery --save
or
typings install dt~jquery --global --save

TypescriptDefinition不是必需的,因为您可以只使用any作为$jQuery的类型

在Angular 组件中,您应该使用@ViewChild()从模板引用一个DOM元素,在视图初始化之后,您可以使用该对象的nativeElement属性并传递给jQuery.

$(或jQuery)声明为JQueryStatic将提供对jQuery的类型化引用.

import {bootstrap}    from '@angular/platform-browser-dynamic';
import {Component, ViewChild, ElementRef, AfterViewInit} from '@angular/core';
declare var $:JQueryStatic;

@Component({
    selector: 'ng-chosen',
    template: `<select #selectElem>
        <option *ngFor="#item of items" [value]="item" [selected]="item === selectedValue">{{item}} option</option>
        </select>
        <h4> {{selectedValue}}</h4>`
})
export class NgChosenComponent implements AfterViewInit {
    @ViewChild('selectElem') el:ElementRef;
    items = ['First', 'Second', 'Third'];
    selectedValue = 'Second';

    ngAfterViewInit() {
        $(this.el.nativeElement)
            .chosen()
            .on('change', (e, args) => {
                this.selectedValue = args.selected;
            });
    }
}

bootstrap(NgChosenComponent);

此示例在PLANKER:http://plnkr.co/edit/Nq9LnK?p=preview上提供

tslint会抱怨chosen不是$上的属性,要解决这个问题,您可以在自定义的*.d.ts文件中向JQuery接口添加定义

interface JQuery {
    chosen(options?:any):JQuery;
}    

Jquery相关问答推荐

使用jquery将外部代码插入div

可以推迟 jQuery 的加载吗?

jQuery .val() 和 .attr('value') 有什么区别?

在 contenteditable div 中的插入符号处插入 html

使用 jQuery 将行添加到表的 tbody

Select select2后触发动作

即时替换 css 文件(并将新样式应用于页面)

复选框值始终为打开

datatable jquery - 表头宽度与正文宽度不对齐

隐藏 div 但保留空白

如何获得元素的正确偏移量? - jQuery

Bootstrap 4 文件输入

Url.Action 在我的 url 中放了一个 &,我该如何解决这个问题?

如何使用 JQuery 获取 GET 和 POST 变量?

jQuery确定匹配的类是否具有给定的ID

jQuery attr 与props ?

jQuery - 添加 ID 而不是类

如何删除集中的 contenteditable pre 周围的边框?

jQuery append() 与 appendChild()

使用 jQuery/Javascript 防止任何形式的页面刷新