Angular2整合其他插件的方法
前言:现在有很多朋友在接触angular2的时候,总是不可避免的会使用一些其他的第3方的插件,而这些插件可能都是基于jquery的,而且也没有对应的angular2的版本,这里我就来讲解一下,在这种情况下,如何整合第3方的jquery插件。我们以angular2整合ztree为例来说明整合的思路及过程。
ztree官方网站:http://www.treejs.cn/v3/main.php#_ztreeinfo
1.一般我在想要将像ztree这种插件集成进来的时候,我会先直接去看ztree它们的在线例子,比如说这个例子:
https://github.com/ztree/ztree_v3/blob/master/demo/cn/super/metro.html
效果图是这样的:
2.看到这个效果之后,我们再来看这个例子的代码:关键代码在这里:
$(document).ready(function(){ $.fn.ztree.init($("#treedemo"), setting, znodes); });
这段代码中使用了jquery,对吧,那我们要集成ztree进来的话,就必须先把jquery引入进来。那我们先不管怎么来集成ztree,我们先来解决如何将jquery引入进来的问题:
3.引入jquery到angular2项目中,当然,如果你使用的插件没有依赖jquery的话可以跳过这个步骤,不过一般第3方插件都依赖它,对吧。引入jquery的话,就比较简单,只要在index.html文件中引入进来就可以了:
<script src="node_modules/jquery/dist/jquery.min.js"></script>
引入进来之后,我们需要测试下,jquery是否成功引入进来。我们使用ng g c demo命令生成一个组件来测试jquery是否成功引入:
![输入图片说明](https://static.oschina.net/uploads/img/201703/26202750_1uel.png "在这里输入图片标题")你会看到,angular-cli已经帮我们生成了必要的文件,然后我们打开demo.component.ts文件,在import语句后面添加以下内容:
declare var $ : any; import { component, oninit } from '@angular/core';declare var $ : any; @component({selector: 'app-demo',templateurl: './demo.component.html',styleurls: ['./demo.component.css']})export class democomponent implements oninit { constructor() { } ngoninit() {console.log($);} }
上面代码添加完成之后,查看浏览器的控制台输出:
![输入图片说明](https://static.oschina.net/uploads/img/201703/26203534_tltd.png "在这里输入图片标题")会发现输出的就是我们平时使用到的jquery对象$。到此,我们就算成功引入jquery到项目中了。
4.将ztree的js库和css库引入到项目中,在index.html文件中我们添加以下代码:
<link rel="stylesheet" type="text/css" href="./assets/ztree/css/metrostyle/metrostyle.css" rel="external nofollow" > <script src="./assets/ztree/js/jquery.ztree.core.min.js"></script>```这样之后,我们就可以测试ztree是否正常引入进来了,我们在demo.component.ts文件中的ngoninit方法中添加以下代码:```console.log($.fn.ztree);```查看控制台会发现,以下输出:![输入图片说明](https://static.oschina.net/uploads/img/201703/26204017_4tlk.png "在这里输入图片标题")在输出的内容我们可以看到,有ztree用来初始化的init方法,这样我们就可以真正的来写一个ztree的例子了。
5.ztree例子
我们通过查看ztree的初始化代码,会发现,需要3个参数,其中第一个参数是一个jquery的对象,第二个参数是ztree的配置对象,具体可以查看ztree的官方文档来看有哪些参数可以设置(http://www.treejs.cn/v3/api.php),第三个参数是用来出事ztree节点的数据。
这里我们直接使用ztree中demo的代码直接复制到demo.component.ts文件中:
import { component, oninit } from '@angular/core'; declare var $ : any; @component({ selector: 'app-demo', templateurl: './demo.component.html', styleurls: ['./demo.component.css'] }) export class democomponent implements oninit { setting = { data: { simpledata: { enable: true } } }; znodes = [ { id: 1, pid: 0, name: "父节点1 - 展开", open: true }, { id: 11, pid: 1, name: "父节点11 - 折叠" }, { id: 111, pid: 11, name: "叶子节点111" }, { id: 112, pid: 11, name: "叶子节点112" }, { id: 113, pid: 11, name: "叶子节点113" }, { id: 114, pid: 11, name: "叶子节点114" }, { id: 12, pid: 1, name: "父节点12 - 折叠" }, { id: 121, pid: 12, name: "叶子节点121" }, { id: 122, pid: 12, name: "叶子节点122" }, { id: 123, pid: 12, name: "叶子节点123" }, { id: 124, pid: 12, name: "叶子节点124" }, { id: 13, pid: 1, name: "父节点13 - 没有子节点", isparent: true }, { id: 2, pid: 0, name: "父节点2 - 折叠" }, { id: 21, pid: 2, name: "父节点21 - 展开", open: true }, { id: 211, pid: 21, name: "叶子节点211" }, { id: 212, pid: 21, name: "叶子节点212" }, { id: 213, pid: 21, name: "叶子节点213" }, { id: 214, pid: 21, name: "叶子节点214" }, { id: 22, pid: 2, name: "父节点22 - 折叠" }, { id: 221, pid: 22, name: "叶子节点221" }, { id: 222, pid: 22, name: "叶子节点222" }, { id: 223, pid: 22, name: "叶子节点223" }, { id: 224, pid: 22, name: "叶子节点224" }, { id: 23, pid: 2, name: "父节点23 - 折叠" }, { id: 231, pid: 23, name: "叶子节点231" }, { id: 232, pid: 23, name: "叶子节点232" }, { id: 233, pid: 23, name: "叶子节点233" }, { id: 234, pid: 23, name: "叶子节点234" }, { id: 3, pid: 0, name: "父节点3 - 没有子节点", isparent: true } ]; constructor() { } ngoninit() { $.fn.ztree($("#ztree"),this.setting,this.znodes); } }
看上面的代码中, $.fn.ztree($("#ztree"),this.setting,this.znodes);这里我们用到了jquery的id选择器,那么我们需要在模板文件demo.component.html中添加一个id为ztree的ul元素
<ul id="ztree"><ul>
至于为什么是ul,可以看ztree的文档,当然你也可以试试别的元素,看能不能实现。
到这里之后,ztree就算被我们集成进来了。效果和对应的项目代码在这里:https://git.oschina.net/zt_zhong/codebe