如何从 Angular 2 组件调用 jstree On 函数
How to call the jstree On function from an Angular 2 component
我正在使用以下代码从我的 angular 2 个组件之一初始化一个 jstree
declare var $: JQueryStatic;
createTree(): void {
$("#tree").jstree({
"core": {
"stripes": true
},
"plugins": ["types", "dnd"],
'types': {
"queue": {
"icon": "fa fa-list-ol"
},
"email": {
"icon": "fa fa-envelope-o"
},
"folder": {
"icon": "fa fa-folder-open-o"
}
}
});
}
我必须将 jstree
函数添加到我的 index.d.ts
文件中的 JQuery 接口才能被 TypeScript 识别
interface JQuery {
jstree(options?: any): JsTree;
}
这个函数按预期运行,我的树视图已成功生成。我现在想进行下一步,将 jstree On
函数绑定到我的 JsTree
对象。我添加了 JsTree 接口
interface JsTree {
on(event: string, callback: Function): void;
}
并更改 createTree
方法以包含 On
函数
createTree(): void {
$("#tree").jstree({
"core": {
"stripes": true
},
"plugins": ["types", "dnd"],
'types': {
"queue": {
"icon": "fa fa-list-ol"
},
"email": {
"icon": "fa fa-envelope-o"
},
"folder": {
"icon": "fa fa-folder-open-o"
}
}
}).on('changed.jstree', function (e, data) {
console.log(data.selected[0]);
});
}
然而,这给了我一个
TypeError: Object doesn't support property or method 'on'
异常。我是否声明了正确的接口,还是我遗漏了什么?
实现它的最简单方法是将 JsTree 初始化包装到单独的 javascript 文件中它自己的函数中,并在下面我列出的 Angular 2 组件中公开该函数步骤
第 1 步 - 在单独的 javascript 文件中将 JsTree 初始化提取到它自己的函数中
function InitJsTree(){
$("#tree").jstree({
"core": {
"stripes": true
},
"plugins": ["types", "dnd"],
'types': {
"queue": {
"icon": "fa fa-list-ol"
},
"email": {
"icon": "fa fa-envelope-o"
},
"folder": {
"icon": "fa fa-folder-open-o"
}
}
})
}
第 2 步 - 请记住将 javascript 文件包含到您的 HTML 页面或页面中包含的压缩包中
第 3 步 - 在 Angular 2 组件 class 的顶部声明 javascript 函数并将其类型设置为 any
declare var InitJsTree: any;
第 4 步 - 在 Angular 2 组件中使用新公开的 javascript 方法
createTree(): void {
InitJsTree();
}
我在开发 ionic2 应用程序时按照以下步骤使其工作,但是,我认为它在其他情况下也应该工作,因为 ionic2 使用 angular2
1) 在 index.html 中包含 jquery 库以及 jstree 库和 css 例如
<script src="lib/jquery-3.2.1.min.js"></script>
<script src="lib/jstree.min.js"></script>
<link href="css/jstree/themes/default/style.css" rel="stylesheet">
2) 在你的组件 html 文件中声明它,例如
<div id="jstree_test"></div>
3) 在你的 component.ts jquery 中应该像这样包含:
declare var $:any;
and it is available and you can create jstree now e.g.
$('#jstree_test').jstree({
'plugins': ["ui","checkbox", "types","themes", "changed", "open_node", "sort","crrm","json_data"],
'types': {
'default': {
'icon': 'jstree-folder'
}
},
'core' : {
'animation' : 0,
'check_callback':true,
'data' : {
'url' : (node) => {
return URL;
},
'type' : 'POST',
'data' : (node) => {
return (params to be passed for URL);
},
'contentType': 'application/json; charset=utf-8', /* if json fomrat needs to be used */
'dataFilter': (data) => {
return HANDLE RESPONSE AND RETUREN JSON ARRAY TO FORM TREE;
},
'error': (e)=>{
}
}
}
});
在这里,我正在根据 AJAX 请求创建 JSTREE。
我正在使用以下代码从我的 angular 2 个组件之一初始化一个 jstree
declare var $: JQueryStatic;
createTree(): void {
$("#tree").jstree({
"core": {
"stripes": true
},
"plugins": ["types", "dnd"],
'types': {
"queue": {
"icon": "fa fa-list-ol"
},
"email": {
"icon": "fa fa-envelope-o"
},
"folder": {
"icon": "fa fa-folder-open-o"
}
}
});
}
我必须将 jstree
函数添加到我的 index.d.ts
文件中的 JQuery 接口才能被 TypeScript 识别
interface JQuery {
jstree(options?: any): JsTree;
}
这个函数按预期运行,我的树视图已成功生成。我现在想进行下一步,将 jstree On
函数绑定到我的 JsTree
对象。我添加了 JsTree 接口
interface JsTree {
on(event: string, callback: Function): void;
}
并更改 createTree
方法以包含 On
函数
createTree(): void {
$("#tree").jstree({
"core": {
"stripes": true
},
"plugins": ["types", "dnd"],
'types': {
"queue": {
"icon": "fa fa-list-ol"
},
"email": {
"icon": "fa fa-envelope-o"
},
"folder": {
"icon": "fa fa-folder-open-o"
}
}
}).on('changed.jstree', function (e, data) {
console.log(data.selected[0]);
});
}
然而,这给了我一个
TypeError: Object doesn't support property or method 'on'
异常。我是否声明了正确的接口,还是我遗漏了什么?
实现它的最简单方法是将 JsTree 初始化包装到单独的 javascript 文件中它自己的函数中,并在下面我列出的 Angular 2 组件中公开该函数步骤
第 1 步 - 在单独的 javascript 文件中将 JsTree 初始化提取到它自己的函数中
function InitJsTree(){
$("#tree").jstree({
"core": {
"stripes": true
},
"plugins": ["types", "dnd"],
'types': {
"queue": {
"icon": "fa fa-list-ol"
},
"email": {
"icon": "fa fa-envelope-o"
},
"folder": {
"icon": "fa fa-folder-open-o"
}
}
})
}
第 2 步 - 请记住将 javascript 文件包含到您的 HTML 页面或页面中包含的压缩包中
第 3 步 - 在 Angular 2 组件 class 的顶部声明 javascript 函数并将其类型设置为 any
declare var InitJsTree: any;
第 4 步 - 在 Angular 2 组件中使用新公开的 javascript 方法
createTree(): void {
InitJsTree();
}
我在开发 ionic2 应用程序时按照以下步骤使其工作,但是,我认为它在其他情况下也应该工作,因为 ionic2 使用 angular2
1) 在 index.html 中包含 jquery 库以及 jstree 库和 css 例如
<script src="lib/jquery-3.2.1.min.js"></script>
<script src="lib/jstree.min.js"></script>
<link href="css/jstree/themes/default/style.css" rel="stylesheet">
2) 在你的组件 html 文件中声明它,例如
<div id="jstree_test"></div>
3) 在你的 component.ts jquery 中应该像这样包含:
declare var $:any;
and it is available and you can create jstree now e.g.
$('#jstree_test').jstree({
'plugins': ["ui","checkbox", "types","themes", "changed", "open_node", "sort","crrm","json_data"],
'types': {
'default': {
'icon': 'jstree-folder'
}
},
'core' : {
'animation' : 0,
'check_callback':true,
'data' : {
'url' : (node) => {
return URL;
},
'type' : 'POST',
'data' : (node) => {
return (params to be passed for URL);
},
'contentType': 'application/json; charset=utf-8', /* if json fomrat needs to be used */
'dataFilter': (data) => {
return HANDLE RESPONSE AND RETUREN JSON ARRAY TO FORM TREE;
},
'error': (e)=>{
}
}
}
});
在这里,我正在根据 AJAX 请求创建 JSTREE。