【发布时间】:2026-01-11 16:05:01
【问题描述】:
在我的 angular-cli 项目中寻找使用 jQuery Query Builder 的方法。
首先我尝试使用插件laplasianin/angular-jqueryQueryBuilder,但我错过了如何将它实际导入到我的组件中的说明。我对 angular/typescript 非常陌生。
然后我通过安装构建器包自己尝试了它:
npm install jQuery-QueryBuilder
我已经将它添加到我的组件中,就像 jQuery 一样。 这是生成的示例代码,基于following demo:
import {AfterViewInit, Component} from "@angular/core";
import * as jQuery from "jquery";
import "jQuery-QueryBuilder/dist/js/query-builder.standalone.js";
import "jQuery-QueryBuilder/dist/css/query-builder.default.css";
@Component({
selector: 'app-query-builder',
templateUrl: './query-builder.component.html',
styleUrls: ['./query-builder.component.scss']
})
export class QueryBuilderComponent implements AfterViewInit{
protected rules_basic = {
condition: 'AND',
rules: [{
id: 'price',
operator: 'less',
value: 10.25
}, {
condition: 'OR',
rules: [{
id: 'category',
operator: 'equal',
value: 2
}, {
id: 'category',
operator: 'equal',
value: 1
}]
}]
};
ngAfterViewInit() {
this.getQueryBuilder();
}
private getQueryBuilder() {
// jQuery('#builder').html('appelsap');
let queryBuilder = jQuery.fn.queryBuilder;
jQuery('#builder').queryBuilder({
plugins: ['bt-tooltip-errors'],
filters: [{
id: 'name',
label: 'Name',
type: 'string'
}, {
id: 'category',
label: 'Category',
type: 'integer',
input: 'select',
values: {
1: 'Books',
2: 'Movies',
3: 'Music',
4: 'Tools',
5: 'Goodies',
6: 'Clothes'
},
operators: ['equal', 'not_equal', 'in', 'not_in', 'is_null', 'is_not_null']
}, {
id: 'in_stock',
label: 'In stock',
type: 'integer',
input: 'radio',
values: {
1: 'Yes',
0: 'No'
},
operators: ['equal']
}, {
id: 'price',
label: 'Price',
type: 'double',
validation: {
min: 0,
step: 0.01
}
}, {
id: 'id',
label: 'Identifier',
type: 'string',
placeholder: '____-____-____',
operators: ['equal', 'not_equal'],
validation: {
format: /^.{4}-.{4}-.{4}$/
}
}],
rules: this.rules_basic
});
}
}
在这种情况下,应用程序编译并加载,但我得到以下错误作为回报
Cannot read property 'template' of undefined.
我不知道如何让这些工作。真的很想在这方面有所帮助。谢谢。
======= 编辑 如所问,这是完整的错误:
ERROR TypeError: Cannot read property 'template' of undefined
at QueryBuilder.<anonymous> (query-builder.standalone.js:415)
at Array.forEach (<anonymous>)
at new QueryBuilder (query-builder.standalone.js:410)
at jQuery.fn.init.$.fn.queryBuilder (query-builder.standalone.js:3934)
at QueryBuilderComponent.webpackJsonp.../../../../../src/app/components/application/query-builder/query-builder.component.ts.QueryBuilderComponent.getQueryBuilder (query-builder.component.ts:40)
at QueryBuilderComponent.webpackJsonp.../../../../../src/app/components/application/query-builder/query-builder.component.ts.QueryBuilderComponent.ngAfterViewInit (query-builder.component.ts:33)
at callProviderLifecycles (core.es5.js:11269)
at callElementProvidersLifecycles (core.es5.js:11244)
at callLifecycleHooksChildrenFirst (core.es5.js:11228)
at checkAndUpdateView (core.es5.js:12325)
======= 编辑 更新了代码以反映当前的使用情况。
【问题讨论】:
-
你能发布整个错误代码吗?它说明了一些关于模板的内容,但您提供的代码中绝对没有
template。 -
jquery 仅在视图初始化后工作。因此在 ngAfterViewInit(){} 函数下运行代码
-
我已经更新了上面的代码以反映我当前的课程。这包括使用
ngAfterViewInit,其中也会出现模板错误。 -
尝试了几个不同的钩子,错误仍然出现。我查看了应该保存哪些模板,似乎应该是包的src目录下的template.js的内容,但这感觉不对。
标签: javascript jquery angular typescript