在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. BZOJ 3294: [Cqoi2011]放棋子(计数dp)

    传送门 解题思路 设\(f[i][j][k]\)表示前\(k\)个颜色的棋子占领了\(i\)行\(j\)列的方案数,那么转移时可以枚举上一个颜色时占领的位置,\(f[i][j][k]=\sum\lim ...

  2. BUUCTF | 摩丝

    将得到的交上去居然不对: 然而大写却过了: flag{ILOVEYOU} 因为摩斯电码在设计的时候就没有区分大小写,而且从码表中可以看到,都是大写,所以在网站上解密出来的自己转成大写

  3. mockito测试入门学习

    一.什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例. 一种替代方案就是使用mocks 从图 ...

  4. 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧

    实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...

  5. selenium,webdriver 执行js语句 对象是百度

    代码要多敲 注释要清晰 最后的两种方法,没有实现我想要的结果 有知道的朋友,给我留言吧 #执行js语句 from selenium import webdriver import time #生成浏览 ...

  6. springCloud的使用05-----路由网关(zuul)

    zuul的主要功能是路由转发和过滤,比如让所有/api-a/*的请求都转发到服务器a上,所有/api-b/*的请求都转发到服务器b上,zuul默认和ribbon结合实现了负载均衡的功能. 1 zuul ...

  7. go中字符类型的使用小结

    示例 // 字符类型的用法 package main import ( "fmt" "unsafe" ) func main() { // 未指定类型并赋值字符 ...

  8. IPv6 关于路由器配置静态IPv6路由的命令

    今天在学习路由器配置ipv6 的时候遇到了一点疑惑 一条命令为:ipv6 route FE80:0202::/32 serail 0/1 201 一条命令为:ipv6 route FE80:0202: ...

  9. 编译lineageos3

    待更 上次尝试将小米开源的内核Xiaomi_Kernel_OpenSource升级到最新版本,花了几天时间解决lineageos编译报错 最后总算成功编译出镜像文件了 but twrp刷入镜像在启动界 ...

  10. js序列化----转载

    https://www.cnblogs.com/craftsman-gao/p/5130567.html JSON的全称是”JavaScript Object Notation“——JavaScrip ...