Javascript 监视组件内部jQuery执行的变量更改
我知道这不是最优的,但我有常规javascript代码更改组件中的属性变量 原因是我的组件中运行了动态javascript(来自Google Blockly)(Javascript 监视组件内部jQuery执行的变量更改,javascript,jquery,angular,angular9,google-blockly,Javascript,Jquery,Angular,Angular9,Google Blockly,我知道这不是最优的,但我有常规javascript代码更改组件中的属性变量 原因是我的组件中运行了动态javascript(来自Google Blockly)(eval) 以下是组件模板: <input #textInput [attr.max-value]="maxValue" type="number" style="width: 495px;" (change)="onChange($eve
eval
)
以下是组件模板:
<input #textInput
[attr.max-value]="maxValue"
type="number"
style="width: 495px;"
(change)="onChange($event)"
[id]="key"
class="form-control"
[disabled]="disabled"
value="{{value}}" />
当我从Angular更改maxValue
时,确实触发了setter代码。但当jQuery执行此操作时,不会触发setter
即:
我尝试过在“区域”中执行代码,认为这将保持Angle的最新状态:
this.ngZone.run(() => {
var code = `$('#ID').attr('max-value', "5")`;
eval(code);
});
也不会触发setter。有什么方法可以实现这一点吗?您不应该使用$('#ID').attr('max-value',“5”)
,因为值是绑定的(因此由Angular处理)
如果要更改值,请更新模型(this.maxValue='5'),而不是视图。Angular将为您更新视图。很难猜测您可以/不能做什么,但您可以尝试添加一个变体观察者。例如:
const node = document.querySelector('.some-element') // or this.textInput.nativeElement;
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => console.log(mutation));
});
observer.observe(node, {
attributes: true,
childList: true,
characterData: true
});
问题在于javascript是动态的。我无法编写
这个.maxValue
,我的应用程序不知道它是什么。@FrancisDucharme你能解释一下jQuery是如何触发的吗?附带说明的是,您不需要使用jQuery,所以让我们看看不使用jQuery和角度机制如何处理……代码是由Blockly生成的:-一个可视化编程小部件,它允许生成生成的代码,在本例中为JS。我认为它无法生成Angular可以运行的打字脚本。
this.ngZone.run(() => {
var code = `$('#ID').attr('max-value', "5")`;
eval(code);
});
const node = document.querySelector('.some-element') // or this.textInput.nativeElement;
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => console.log(mutation));
});
observer.observe(node, {
attributes: true,
childList: true,
characterData: true
});