Angular5中调用第三方js插件
匿名 · 更新于 2018/8/29
话不多说直入主题,最常见的有三种方式来引用第三方插件,下面以jquery插件及基于JQuery的两款插件:nicescroll和rangeSlider为例。
一、第一种方式:在.angular-cli.json文件中配置
步骤:
1.在项目根目录.angular-cli.json文件中找到script字段,在数组中添加要引用的所有js文件(注意先后顺序)
"scripts": ["assets/jquery-3.2.1.js","assets/jquery.nicescroll.js","assets/ion.rangeSlider.js"],
2.在需要用该插件的组件中(.ts文件中)做如下声明:declare var $:any;
目的是不让编译时报错
3.接下来在ngOnInit方法中就能正常用上面的三款插件了。
二、第二种方式:在index.html页面上引用插件
步骤:
1.在根目录的index.html页面中添加如下引用:
-
<div class="hljs-ln-code" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 0px 8px; word-break: break-all; float: left; height: 22px;"> <div class="hljs-ln-line" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all;"><code class="language-html hljs xml" style="box-sizing: border-box; outline: 0px; display: block; overflow-x: auto; padding: 8px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 4px; line-height: 22px; white-space: pre; word-wrap: normal; font-family: Consolas, Inconsolata, Courier, monospace, "PingFang SC", "Microsoft YaHei", sans-serif; word-break: break-all;"><span class="hljs-tag" style="box-sizing: border-box; outline: 0px; word-break: break-all;"><<span class="hljs-name" style="box-sizing: border-box; outline: 0px; color: rgb(224, 108, 117); word-break: break-all;">script</span> <span class="hljs-attr" style="box-sizing: border-box; outline: 0px; color: rgb(209, 154, 102); word-break: break-all;">type</span>=<span class="hljs-string" style="box-sizing: border-box; outline: 0px; color: rgb(152, 195, 121); word-break: break-all;">"text/javascript"</span> <span class="hljs-attr" style="box-sizing: border-box; outline: 0px; color: rgb(209, 154, 102); word-break: break-all;">src</span>=<span class="hljs-string" style="box-sizing: border-box; outline: 0px; color: rgb(152, 195, 121); word-break: break-all;">"assets/jquery-3.2.1.js"</span>></span><span class="hljs-tag" style="box-sizing: border-box; outline: 0px; word-break: break-all;"></<span class="hljs-name" style="box-sizing: border-box; outline: 0px; color: rgb(224, 108, 117); word-break: break-all;">script</span>></span></code></div> </div> </li> <li style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; list-style-type: none; word-break: break-all; height: 22px;"> <div class="hljs-ln-numbers" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all; float: left; height: 22px; width: 24px; border-right: 1px solid rgb(197, 197, 197);"> <div class="hljs-ln-line hljs-ln-n" data-line-number="2" style="box-sizing: border-box; outline: 0px; padding: 0px 8px 0px 0px; margin: 0px; text-align: right; word-break: break-all;"> </div> </div> <div class="hljs-ln-code" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 0px 8px; word-break: break-all; float: left; height: 22px;"> <div class="hljs-ln-line" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all;"><code class="language-html hljs xml" style="box-sizing: border-box; outline: 0px; display: block; overflow-x: auto; padding: 8px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 4px; line-height: 22px; white-space: pre; word-wrap: normal; font-family: Consolas, Inconsolata, Courier, monospace, "PingFang SC", "Microsoft YaHei", sans-serif; word-break: break-all;"><span class="hljs-tag" style="box-sizing: border-box; outline: 0px; word-break: break-all;"><<span class="hljs-name" style="box-sizing: border-box; outline: 0px; color: rgb(224, 108, 117); word-break: break-all;">script</span> <span class="hljs-attr" style="box-sizing: border-box; outline: 0px; color: rgb(209, 154, 102); word-break: break-all;">type</span>=<span class="hljs-string" style="box-sizing: border-box; outline: 0px; color: rgb(152, 195, 121); word-break: break-all;">"text/javascript"</span> <span class="hljs-attr" style="box-sizing: border-box; outline: 0px; color: rgb(209, 154, 102); word-break: break-all;">src</span>=<span class="hljs-string" style="box-sizing: border-box; outline: 0px; color: rgb(152, 195, 121); word-break: break-all;">"assets/jquery.nicescroll.js"</span>></span><span class="hljs-tag" style="box-sizing: border-box; outline: 0px; word-break: break-all;"></<span class="hljs-name" style="box-sizing: border-box; outline: 0px; color: rgb(224, 108, 117); word-break: break-all;">script</span>></span></code></div> </div> </li>
2.在需要用该插件的组件中(.ts文件中)做如下声明:declare var $:any;
目的是不让编译时报错
3.接下来在ngOnInit方法中就能正常用上面的三款插件了
三、在具体组件中import 插件
步骤:
1.在需要用到插件的ts文件中添加如下引用:
-
<div class="hljs-ln-code" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 0px 8px; word-break: break-all; float: left; height: 22px;"> <div class="hljs-ln-line" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all;"><code class="language-html hljs xml" style="box-sizing: border-box; outline: 0px; display: block; overflow-x: auto; padding: 8px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 4px; line-height: 22px; white-space: pre; word-wrap: normal; font-family: Consolas, Inconsolata, Courier, monospace, "PingFang SC", "Microsoft YaHei", sans-serif; word-break: break-all;">import "assets/jquery-3.2.1.js";</code></div> </div> </li> <li style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; list-style-type: none; word-break: break-all; height: 22px;"> <div class="hljs-ln-numbers" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all; float: left; height: 22px; width: 24px; border-right: 1px solid rgb(197, 197, 197);"> <div class="hljs-ln-line hljs-ln-n" data-line-number="2" style="box-sizing: border-box; outline: 0px; padding: 0px 8px 0px 0px; margin: 0px; text-align: right; word-break: break-all;"> </div> </div> <div class="hljs-ln-code" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 0px 8px; word-break: break-all; float: left; height: 22px;"> <div class="hljs-ln-line" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all;"><code class="language-html hljs xml" style="box-sizing: border-box; outline: 0px; display: block; overflow-x: auto; padding: 8px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 4px; line-height: 22px; white-space: pre; word-wrap: normal; font-family: Consolas, Inconsolata, Courier, monospace, "PingFang SC", "Microsoft YaHei", sans-serif; word-break: break-all;">import "assets/jquery.nicescroll.js";</code></div> </div> </li> <li style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; list-style-type: none; word-break: break-all; height: 22px;"> <div class="hljs-ln-numbers" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all; float: left; height: 22px; width: 24px; border-right: 1px solid rgb(197, 197, 197);"> <div class="hljs-ln-line hljs-ln-n" data-line-number="3" style="box-sizing: border-box; outline: 0px; padding: 0px 8px 0px 0px; margin: 0px; text-align: right; word-break: break-all;"> </div> </div> <div class="hljs-ln-code" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px 0px 0px 8px; word-break: break-all; float: left; height: 22px;"> <div class="hljs-ln-line" style="box-sizing: border-box; outline: 0px; padding: 0px; margin: 0px; word-break: break-all;"><code class="language-html hljs xml" style="box-sizing: border-box; outline: 0px; display: block; overflow-x: auto; padding: 8px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 4px; line-height: 22px; white-space: pre; word-wrap: normal; font-family: Consolas, Inconsolata, Courier, monospace, "PingFang SC", "Microsoft YaHei", sans-serif; word-break: break-all;">import "assets/ion.rangeSlider.js";</code></div> </div> </li>
2.在需要用该插件的组件中(.ts文件中)做如下声明:declare var $:any;
目的是不让编译时报错
3.接下来在ngOnInit方法中就能正常用上面的三款插件了
三种方式都介绍完了,下面来说说需要注意的事情,前两种方式需要重启服务才会有效果(我当时用的ng serve,不重启的话不起作用);第三种方式无需重启服务,直接就能看到效果。
真是吐血的教训,刚开始尝试的前两种方式,怎么着都不成功,最后第三种方式成功了,后来重启了下服务,发现前两种方式也成功了。
不知道为什么前两种方式需要重启服务,自我猜测下:也许是前两种都是修改的app文件夹外面的文件,不会自动检测和编译,而第三种方式能检测到。
不知猜的对不对,如果有大牛了解内部原理,望不吝赐教。
