gpt4 book ai didi

angularjs - 那些 _compiler 参数有什么用? _compiler(element.childNodes, _ directiveMap)(_ injector, _element.childNodes)

转载 作者:行者123 更新时间:2023-12-03 03:28:09 28 4
gpt4 key购买 nike

我需要帮助来理解我成功使用的 dart 代码。
(详细信息:我用它来注入(inject)包含绑定(bind)到可变 CSS 类的 SVG 图形)

  • 我可以在这里调用构造函数参数“注入(inject)依赖项”吗?
  • 这些参数的内部是什么:this._injector、this._compiler、this._directiveMap
  • 这些部分如何使用 _compiler(...) 一起工作?

  • 我找到了这个解释,但它并没有涵盖整个故事: https://docs.angularjs.org/guide/compiler

    编码:
    @Decorator(
    selector: '[bindHtml]'
    )
    class BindHtml {
    static dom.NodeValidator validator;

    dom.Element _element;
    Compiler _compiler;
    Injector _injector;
    DirectiveMap _directiveMap;

    BindHtml(this._element, this._injector, this._compiler, this._directiveMap) {
    validator = new AllowAllValidator();
    }

    @NgOneWay('bindHtml')
    set value(value) {
    if(value == null) {
    _element.nodes.clear();
    return;
    }
    String givenHTML = _element.innerHtml;
    value = value+= givenHTML;
    _element.setInnerHtml((value == null ? '' : value.toString()), validator: validator);
    if(value != null) {
    _compiler(_element.childNodes, _directiveMap)(_injector, _element.childNodes);
    }
    }
    }

    最佳答案

    首先,意识到 Compiler 的 API和 ViewFactory在 AngularDart 0.13.0 中发生了变化。看起来您正在使用旧的 API,应该改用新的 API。

    二、您的bindHtml指令与核心 ng-include 非常相似指示。考虑改用它。

    三、访问CompilerViewFactory直接被认为是高级用法——你正在进入 Angular 的部分,其中 API 不是很稳定,也没有很好的文档记录。我不完全了解您的用例,但很可能有一种方法可以在不访问 Compiler 的情况下实现您的解决方案。 .

    也就是说,我会深入研究你的问题:

  • 是的。构造函数参数都被注入(inject)。您的指令将获得 Compiler 的实例, Element等来自依赖注入(inject)系统。由于注入(inject)系统遵循 DOM 的结构,你会得到 Element这个@Decorator已定义,但全局单例 Compiler .

    请注意,在 0.13.0 中,指令(装饰器、组件)将要注入(inject) DirectiveInjector反而。该注入(inject)器针对指令进行了优化,并为每个 DOM 节点创建。
  • (和 3)编译器获取 DOM 节点列表和 DirectiveMap并产生 ViewFactory .它将遍历创建“ElementBinder s”的 DOM 节点,其中包含有关在哪些节点上创建哪些指令的说明。此信息存储在同一 View 的多个实例中。 . Angular 有一个 ViewCache用于避免调用 Compiler一遍又一遍。
    DirectiveMap被传入,因此我们可以在应用程序的不同点使用不同的指令。我认为这是 bug并且不应包含在 API 中。
    ViewFactory然后接受 Scope 、注入(inject)器和可选的已经创建的 DOM 节点并构建 View这是页面上实际的 DOM 节点。 (同样,此 API 在 0.13.0 中有更改)
  • 关于angularjs - 那些 _compiler 参数有什么用? _compiler(element.childNodes, _ directiveMap)(_ injector, _element.childNodes),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099817/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com