Angularjs 那些编译器参数有什么好处_编译器(_element.childNodes,_directiveMap)(_injector,_element.childNodes)
我需要帮助理解我成功使用的dart代码。 (详细信息:我使用它注入SVG图形,其中包含对变量CSS类的绑定)Angularjs 那些编译器参数有什么好处_编译器(_element.childNodes,_directiveMap)(_injector,_element.childNodes),angularjs,dart,angular-dart,Angularjs,Dart,Angular Dart,我需要帮助理解我成功使用的dart代码。 (详细信息:我使用它注入SVG图形,其中包含对变量CSS类的绑定) 我可以在这里调用构造函数参数“注入依赖项”吗 这些参数的内部是什么:this.\u注入器,this.\u编译器,this.\u directiveMap 使用_编译器(…)这些部分是如何协同工作的 我找到了这个解释,但它并没有涵盖整个故事: 守则: @Decorator( selector: '[bindHtml]' ) class BindHtml { static dom
- 我可以在这里调用构造函数参数“注入依赖项”吗
- 这些参数的内部是什么:this.\u注入器,this.\u编译器,this.\u directiveMap
- 使用_编译器(…)这些部分是如何协同工作的
@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);
}
}
}
首先,认识到
编译器
和视图工厂
的API在AngularDart 0.13.0中发生了变化。看起来您正在使用旧的API,应该改为使用新的API
其次,您的bindHtml
指令与核心nginclude
指令非常相似。考虑使用它。< /P>
第三,直接访问编译器
和ViewFactory
被认为是高级用法——您将进入Angular的某些部分,这些部分的API既不非常稳定,也没有很好的文档。我不完全理解您的用例,但很可能有一种方法可以在不访问编译器的情况下实现您的解决方案
话虽如此,我将深入探讨您的问题:
对。构造函数参数都被注入。您的指令将从依赖项注入系统获取编译器
、元素
等的实例。由于注入系统遵循DOM的结构,因此您将获得定义此@Decorator
的元素,但它是一个全局单例编译器
请注意,在0.13.0中,指令(装饰器、组件)将希望注入DirectiveInjector
。该注入器针对指令进行了优化,并为每个DOM节点创建
(和3)编译器获取一个DOM节点列表和一个DirectiveMap
,并生成一个ViewFactory
。它将遍历DOM节点,创建“ElementBinder
s”,其中包含关于在哪些节点上创建哪些指令的说明。此信息存储在同一视图的多个实例化上。Angular有一个ViewCache
,用于避免反复调用编译器
DirectiveMap
被传入,因此我们可以在应用程序的不同点使用不同的指令。我认为这是一个错误,不应该包含在API中
ViewFactory
然后获取一个Scope
、注入器和可选的已经创建的DOM节点,并构建视图,该视图是页面上的实际DOM节点。(同样,此API在0.13.0中有更改)
非常感谢。我们现在使用AngularDart 0.12.0。ng include似乎不是我们想要的,因为我们确实从url加载内容,但我们在编译代码并将其注入dom之前对代码进行了增强。还有两个问题:1。_编译器需要_注入器来获取_element.childNodes中的潜在依赖项?“编译器(..)(..)后面的两个括号是如何和为什么?“固有危险”(MHEver于3月19日发表评论)这句话让我有什么好害怕的?我将该代码视为客户端代码,永远不会信任服务器端的输出。这就是为什么我不害怕使用此代码进行代码注入。我应该知道是否存在CSRF漏洞或类似漏洞?两个括号:编译器产生一个视图工厂,即第一个括号。ViewFactory
可以根据需要重复使用以生成View
s。正是ViewFactory
需要Injector
来获取指令实例。-------危险的部分,是的,如果在模板字符串中包含用户输入,则是CSRF/XSRF风险。