【问题标题】:blackboxed zone.js in developer tools but still its going into zone.js开发人员工具中的黑盒 zone.js,但仍进入 zone.js
【发布时间】:2018-05-15 15:11:14
【问题描述】:
  • 我是 Angular 新手。
  • 我正在调试低于分数的方法。
  • 当我在开发人员工具中跨步时,编码:scores() 的 true 进入 zone.js。
  • 我对 zone.js 进行了黑盒化,但它仍然进入 zone.js 并指向这一行 task.callback.apply(applyThis, applyArgs);
  • 您能告诉我为什么它会转到 zone.js,尽管我已对其进行了黑盒化。
  • 如果你们让我知道,那就太好了,这样我以后可以自己修复它。
  • 在下面提供我的代码

我的代码

scores() {
    let that = this;
    this.redoCount = 0;
    this.undoCount = 0;
    this.datasourceList = [];
    this.createDatePicker();
    $("#optPlayerDetaileditor").kendoEditor({
        tools: ["bold", "italic", "underline"],
        change: function () {
            that.sportsPlayer.sportsPlayerDetailsText = this.value();
            let eventData = { "eventKey": "optPlayerDetaileditor", "sourceValue": that.sportsPlayerDetailSource, "destinationValue": that.sportsPlayer.sportsPlayerDetailsText, "type": "generateBtn" }
            that.eventCapture(eventData);
            that.sportsPlayerDetailSource = that.sportsPlayer.sportsPlayerDetailsText;
            that.saveBtnEnableDisable();
        }, encoded: true,
        serialization: {
            semantic: false,
            entities: false,
            custom: function (html) {
                return html.replace(/<b>/g, "<B>").replace(/<\/b>/g, "</B>").replace(/<i>/g, "<I>").replace(/<\/i>/g, "</I>").replace(/<u>/g, "<U>")
                    .replace(/<\/u>/g, "</U>").replace(/<br \/>/g, "\n").replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&quot;/g, '"').replace(/&gt;/g, ">")
                    .replace(/&lt;/g, "<").replace(/&middot;/g, ".").replace(/&nbsp;/g, " ");
            }
        },
    }).text();
}

zone.js

ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {
    try {
        return this._invokeTaskZS
                    ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this.zone, targetZone, task, applyThis, applyArgs)
                    : task.callback.apply(applyThis, applyArgs);
}

【问题讨论】:

    标签: javascript html angular angularjs-directive zone.js


    【解决方案1】:

    不知道黑盒 Zone.js 是什么意思。但是调用方法task.callback.apply(applyThis, applyArgs) 来调用任何计划任务。

    例如如果你执行window.setTimeout(cb,1000);,这实际上会调用monkey patched API而不是window.setTimeout。在该 API 中,一个新的 Task 对象是 created,其属性 callback 使用 cbsetTimeout 方法中传递的初始化。此外,cb 被另一个名为timer 的回调函数所取代。现在,时间到了,JS VM会调用Zone.js的回调方法,即timer,最终会调用task.callback.apply(applyThis, applyArgs)

    关于 Zone.js 猴子如何修补 API 的详细信息,您可以参考下面的文章。

    https://medium.com/reverse-engineering-angular/angular-deep-dive-zone-js-how-does-it-monkey-patches-various-apis-9cc1c7fcc321

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多