在angular4的项目中需要使用bootstrap的tooltip插件。

1. 使用命令安装jQuery和bootstrap

npm install bootstrap jquery --save

2. 安装了bootstrap和jQuery之后,需要在.angular-cli.json中设置对jQuery和bootstrap的引用。

...
"styles": [
"styles/bootstrap.scss",
"styles.scss",
],
"scripts": [
"../node_modules/jquery/dist/jquery.js",
"../node_modules/jqueryui/jquery-ui.js",
"../node_modules/bootstrap/dist/js/bootstrap.js",
]
...

3. 使用directive来定义一个可共用的属性指令。

import { AfterViewInit, Directive, ElementRef, HostBinding, Input, OnDestroy } from '@angular/core';

/**
* @see https://getbootstrap.com/docs/3.3/javascript/#tooltips
*/
@Directive({
selector: '[appTooltip]'
})
export class TooltipDirective implements AfterViewInit, OnDestroy { // @HostBinding('attr.data-toggle')
// readonly dataToggle = 'tooltip'; @Input()
@HostBinding('attr.data-placement')
appTooltipPlacement = 'bottom'; @Input()
@HostBinding('title')
appTooltip: string; constructor(private elementRef: ElementRef) {
} ngAfterViewInit(): void {
// bugfix: 使用 container: 'body' 可以避免在 btn-group 时由于插入了 tooltip 后,
// 最后一个 button 不满足 :not(:last-child) 时导致的圆角消失的 bug
$(this.elementRef.nativeElement).tooltip({
container: 'body'
} as any);
} ngOnDestroy(): void {
$(this.elementRef.nativeElement).tooltip('destroy');
}
}

4. 在app.module.ts中声明这个directive,需要在declarations和exports中引入

...
import {TooltipDirective} from './common/directives/tooltip.directive'; @NgModule({
declarations: [
AppComponent,
...
TooltipDirective
],
imports: [
BrowserModule, FormsModule, ...
],
exports: [TooltipDirective],
entryComponents: [
....
],
providers: [...],
bootstrap: [AppComponent]
})
export class AppModule {
constructor() {
...
}
}

5.html页面里面使用[appTooltip] 来使用这个directive。

<button type="button" class="btn btn-default" (click)="new.emit()" appTooltip="新建">
<i class="i-new"></i>
</button>

5. 不过这里出现一个报错。

Property 'tooltip' does no t exist on type 'JQuery<HTMLElement>

检查了很久,后来找到了问题,没有声明$。

需要在tooltip.directive.ts文件中加上

declare let $: any;

,然后就可以正常使用了。

6.要在项目内全局设置jQuery的引用,在tsconfig.json文件中配置红色显示的部分

{
"compileOnSave": true,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"skipLibCheck": true,
"strictNullChecks": false,
"noStrictGenericChecks": false,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"types": [
"jasmine",
"node",
"jquery",
"jqueryui"

],
"lib": [
"es2017",
"dom"
]
}
}

在angular项目中使用bootstrap的tooltip插件时,报错Property 'tooltip' does no t exist on type 'JQuery<HTMLElement>的解决方法和过程的更多相关文章

  1. 解决在Vue项目中时常因为代码缩进导致页面报错的问题

    前言 如果我们初次使用vue-cli来构建单页SPA应用,在撸代码的过程中有可能会遇到这种因为代码缩进导致 页面报错的问题,导致我们烦不胜烦.接下来我们就来看一看如何解决这个小问题... erro原因 ...

  2. 解决 maven 项目中加入了 lombok 库后依然报错的问题

    平时我们采用 maven 引入第三方库,可以方便的管理第三方 jar 包,然加入 lombok 后启动 eclipse 依然报错,这是由于 lombok 是通过反射在运行时自动生成 getter(). ...

  3. 【Kotlin】spring boot项目中,在Idea下启动,报错@Configuration class 'BugsnagClient' may not be final.

    报错如下: Exception encountered during context initialization - cancelling refresh attempt: org.springfr ...

  4. angular项目线上地址跳转或刷新报错的解决

    引用地址:https://blog.csdn.net/qq_35415307/article/details/80707463 本地ng项目没问题,到了线上跳转刷新都会报404错误,相信这个问题每个做 ...

  5. 关于Eclipse中使用Maven进行Install安装时候报错Perhaps you are running on a JRE rather than a JDK?解决办法

    所遇到的问题: 详情报错: 英文描述: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3. ...

  6. Eclipse检出原MyEclipse项目后 javax.servlet.http相关类都报错【我,体现着一类jar包问题的处理方法】

    用Eclipse检出原来为myEclipse搭建的一个项目,检出后,所有关于httpservlet的类都报异常,说有没实现的方法? 但这个项目之前人家用MyEclipse运行都是没有问题的, 按住CT ...

  7. vue-cli+webpack在生成的项目中使用bootstrap方法(二)

    vue-cli+webpack在生成的项目中使用bootstrap方法(一)中,是通过手动下载bootstrap库,然后手动添加到src/assets中,显然是过程太多. 当然是可以更省力些,可以通过 ...

  8. gulp 在 angular 项目中的使用

    gulp 在 angular 项目中的使用 keyword:gulp,angularjs,ng,ngAnnotate,jshint,gulpfile 最后附完整简洁的ng项目gulpfile.js 准 ...

  9. 在 React项目中使用 bootstrap

    在使用create-react-app 创建的项目中使用 bootstrap; 安装react-bootstrap; npm install react-bootstrap --savenpm ins ...

随机推荐

  1. Selenium:多表单(frame/iframe)切换(Switch模块)

    frame标签有frameset.frame.iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe需要切换进去才能定位到其中的元素 比如下面这个网 ...

  2. 【Python-Django讲义】针对django的ppt讲义

    MCV思想: M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目 ...

  3. django-5-使用数据库

    修改默认数据库 django默认数据库为 SQLite3,若需要修改,比如改成mysql,则需要修改与settings.py文件同路径的__init__.py文件,添加如下内容: import pym ...

  4. leetcode.双指针.524通过删除字母匹配到字典里最长单词-Java

    1. 具体题目 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到.如果答案不止一个,返回长度最长且字典顺序最小的字符串.如果答案不存在,则返回空 ...

  5. docker--linux network namespace

    docker container的namespace使用 的是一种虚拟网络设备 veth-pair.顾名思义,veth-pair 就是一对的虚拟设备接口,和 tap/tun 设备不同的是,它都是成对出 ...

  6. ingress-nginx配置https文件访问

    1.先将证书文件上传至服务器特定目录.比如:/root/ssl 假设证书名称为:server.crt和server.key 2.现在主节点后台创建私密文件. kubectl create secret ...

  7. Hibernate4教程二:基本配置

    可编程的配置方式一: 如果在配置cfg.xml的时候,不想在里面配置hbm.xml怎么办呢?可在程序里使用可编程的配置方式,也就是使用程序来指定在cfg.xml里面的配置信息,不推荐这种方式.如下: ...

  8. 【学习总结】Python-3-逻辑运算符

    参考:菜鸟教程-Python3运算符 逻辑运算符的计算规则划重点: 并不是只返回布尔型,有时会返回变量的数值 (优先级:not>and>or) 总结: '与或非'三件套中,not与数学逻辑 ...

  9. 在线px转换rem工具

    今天推荐一个在线工具,在线px转换rem工具 只要输入1rem = 多少px即可在线转换 和cssrem插件差不多的功能   rem在线转换工具: http://www.ofmonkey.com/fr ...

  10. Mac 安装cnpm

    1.先安装node   node的下载地址:http://nodejs.cn/download/   这个没什么好说的,安装完成后测试一下,在终端输入:node -v   这时候就可以看到安装的nod ...