Angular Js 2 未加载 jquery 查询生成器内部脚本文件
Angular Js 2 not loading the jquery query builder internal script files
我的要求
需要使用 angularjs 2 typescript
在模式中加载 jquery 查询生成器
我做了什么
我在 angularjs 2 中创建了一个动态表单,其中包含 3 个 select 框和 1 个文本框,在单击该文本框时我调用了 bootstrap modal inside the modal body 我已经对查询生成器进行了编码,并在 template_rule.html
中为该查询生成器创建了一个内部 java 脚本
发生了什么
当我单击文本框时出现模态弹出窗口,在模态主体内只有三个按钮正在呈现,而主查询构建器视图未呈现。
这是完整的演示 link(http://plnkr.co/edit/d38iwjLhJzTjM5t46zD7?p=preview)
演示 Link 功能
在这个link中左上角会有一个按钮,点击它会继续添加一组字段,如果你点击那个文本框,那组字段中会有一个文本框将弹出一个模式,因为只有在呈现查询构建器时,按钮才会显示,但核心功能部分不会显示在该模式弹出窗口中,查询构建器脚本位于 app/template_rule.html 文件和必要的库包含在 index.html 文件中,请帮我解决这个问题
这是完整工作代码的一部分,请参考上面的link
import {Component} from 'angular2/core';
import {
FORM_DIRECTIVES, FormBuilder, ControlGroup, ControlArray, Validators, NgForm, Control,
AbstractControl
}from 'angular2/common';
@Component({
selector: 'my-app',
templateUrl:'app/template_rule.html',
directives: [FORM_DIRECTIVES]
})
export class AppComponent {
userForm: ControlGroup;
constructor(private fb: FormBuilder) {
this.userForm = fb.group({
rules_list: new ControlArray([])
});
this.rules_list();
}
rules_list(){
this.userForm.controls['rules_list'].push(this.fb.group({
select_state: this.fb.control("",Validators.required),
rules: this.fb.control("", Validators.required),
pass_state: this.fb.control("", Validators.required),
fail_state: this.fb.control("", Validators.required)
}));
}
removeRules(ctrl) {
let rulesLists = (<Array>(<ControlGroup>this.userForm.controls['rules_list']).controls);
for(var i = 0; i < rulesLists.length; i++) {
console.log("each rules", ctrl);
if(rulesLists[i] == ctrl) {
console.log("rules to remove", rulesLists[i]);
rulesLists.splice(i, 1);
(<ControlGroup>this.userForm.controls['rules_list']).updateValueAndValidity();
break;
}
}
}
submitRules() {
console.log(this.userForm.value)
}
}
通过在 angular2 模板加载时动态加载查询生成器脚本文件解决了这个问题
下面是动态加载的代码
load_script(){
var head=document.getElementByTagName('head')[0];
var script=document.createElement('script');
script.type='text/javascript';
script.src='js file url'
head.appendChild(script);
}
我的要求
需要使用 angularjs 2 typescript
在模式中加载 jquery 查询生成器我做了什么
我在 angularjs 2 中创建了一个动态表单,其中包含 3 个 select 框和 1 个文本框,在单击该文本框时我调用了 bootstrap modal inside the modal body 我已经对查询生成器进行了编码,并在 template_rule.html
中为该查询生成器创建了一个内部 java 脚本发生了什么
当我单击文本框时出现模态弹出窗口,在模态主体内只有三个按钮正在呈现,而主查询构建器视图未呈现。
这是完整的演示 link(http://plnkr.co/edit/d38iwjLhJzTjM5t46zD7?p=preview)
演示 Link 功能
在这个link中左上角会有一个按钮,点击它会继续添加一组字段,如果你点击那个文本框,那组字段中会有一个文本框将弹出一个模式,因为只有在呈现查询构建器时,按钮才会显示,但核心功能部分不会显示在该模式弹出窗口中,查询构建器脚本位于 app/template_rule.html 文件和必要的库包含在 index.html 文件中,请帮我解决这个问题
这是完整工作代码的一部分,请参考上面的link
import {Component} from 'angular2/core';
import {
FORM_DIRECTIVES, FormBuilder, ControlGroup, ControlArray, Validators, NgForm, Control,
AbstractControl
}from 'angular2/common';
@Component({
selector: 'my-app',
templateUrl:'app/template_rule.html',
directives: [FORM_DIRECTIVES]
})
export class AppComponent {
userForm: ControlGroup;
constructor(private fb: FormBuilder) {
this.userForm = fb.group({
rules_list: new ControlArray([])
});
this.rules_list();
}
rules_list(){
this.userForm.controls['rules_list'].push(this.fb.group({
select_state: this.fb.control("",Validators.required),
rules: this.fb.control("", Validators.required),
pass_state: this.fb.control("", Validators.required),
fail_state: this.fb.control("", Validators.required)
}));
}
removeRules(ctrl) {
let rulesLists = (<Array>(<ControlGroup>this.userForm.controls['rules_list']).controls);
for(var i = 0; i < rulesLists.length; i++) {
console.log("each rules", ctrl);
if(rulesLists[i] == ctrl) {
console.log("rules to remove", rulesLists[i]);
rulesLists.splice(i, 1);
(<ControlGroup>this.userForm.controls['rules_list']).updateValueAndValidity();
break;
}
}
}
submitRules() {
console.log(this.userForm.value)
}
}
通过在 angular2 模板加载时动态加载查询生成器脚本文件解决了这个问题
下面是动态加载的代码
load_script(){
var head=document.getElementByTagName('head')[0];
var script=document.createElement('script');
script.type='text/javascript';
script.src='js file url'
head.appendChild(script);
}