Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 监视组件内部jQuery执行的变量更改_Javascript_Jquery_Angular_Angular9_Google Blockly - Fatal编程技术网

Javascript 监视组件内部jQuery执行的变量更改

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

我知道这不是最优的,但我有常规javascript代码更改组件中的属性变量

原因是我的组件中运行了动态javascript(来自Google Blockly)(
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
});