Angular5 @最新的这里,我有几个组件使用几个javascript与jQuery插件,我需要它们,但是当dom被这样的插件修改时,角度绑定不会更新它们的值,反之亦然。当通过角度变量的变化修改dom时,会发生同样的事情。
我想出了这个粗略的解决方案:
$('*').each(function()
{
$(this).on("change",
(event)=>
{
event.preventDefault();
event.stopPropagation();
if(event.detail!=="ng")
{setTimeout(()=>{this.dispatchEvent(new CustomEvent("change", {detail: "ng"}));},0);}
});
});
由于某些原因,使用trigger()触发的事件仅在jQuery中侦听,但使用dispatchEvent()触发的事件都由两者监听。
反过来说,我发现没有什么能比手动触发特定事件更好:
jq_update()
{
$('.select-chosen').each(function(){setTimeout(()=>{$(this).trigger("chosen:updated", true, true);}, 0)});
$('.datepicker').each(function(){setTimeout(()=>{$(this).trigger("oninput", true, true);}, 0)});
}
这些问题有更好的解决方案吗?使用ChangeDetectorRef和Zone绝对没有,我想知道为什么......