考虑以下示例:
def getMayaWindow():
ptr = apiUI.MQtUtil.mainWindow()
if ptr is not None:
return shiboken.wrapInstance(long(ptr), QtGui.QMainWindow)
class pipeWindow(formClass,baseClass):
def __init__(self, parent=getMayaWindow()):
super(pipeWindow,self).__init__(parent)
self.setupUi(self)
self.setObjectName('pipe_window')
try:
cmds.deleteUI('dockPane')
except:
pass
self.pane = cmds.paneLayout('dockPane', cn='single')
if 'pipeDock' not in cmds.lsUI(ctl=1) :
cmds.dockControl('pipeDock', con=self.pane, area='right',
allowedArea = ['right','left'], label =
"ANMD_Pipeline", w=365)
else:
pass
cmds.control( 'pipe_window', e=True, p=self.pane)
模板中的用法:
@Directive({
selector: '[testActiveTab]'
})
export class ActiveTabDirective {
@Input('testActiveTab') active: boolean = true;
constructor(
private parent: TabbedContainerComponent, // <--
private child: TabComponent // <--
) {
}
// ...
}
正如您可能已经猜到的那样,此指令用于标记选项卡式容器组件中的活动选项卡。
然而,可能的问题是,每次创建<test-tabbed-container>
<test-tab>
<!-- ... -->
</test-tab>
<test-tab testActiveTab>
<!-- ... -->
</test-tab>
</test-tabbed-container>
的实例时,注入器都会重新播种ActiveTabDirective
和parent
属性,这意味着如果容器中有child
个标签,则n
初始化将会发生。
问题:
依赖注入在Angular2 +中是一项昂贵的操作吗?或者只是通过参考,因此便宜?
答案 0 :(得分:2)
昂贵&#39;这里解决了hierarchical dependency injection在Angular中的工作方式,性能影响就是结果。
DI无法实例化并注入未与编译元素链接的组件。
提供者是单身人士(在当前注射器的范围内)。如果未在当前注入器中定义提供程序但在父注入器中实例化,则会注入现有提供程序实例。
尽管Injectable
,Directive
和Component
类都是可注射的,但Angular明确区分了指令/组件(在declarations
中定义)与常规提供者(在{{1中定义) }},并且他们的行为不同。指令/组件由编译器实例化,因此不能意外注入额外的实例。
providers
将注入现有的组件实例,如果没有,则抛出。在哪里&#39;孩子&#39;实际上是自我&#39;因为儿童尚未编译,如有必要,应使用constructor(
private parent: TabbedContainerComponent,
private child: TabComponent
) {}
或ViewChild
进行检索。