我知道这个问题似乎微不足道,但事实并非如此。让我解释。 对于一个为其所有孩子提供instacne的组件,这很容易,你只需:
#!/bin/bash
seq=1
for f in $(ls -rt *jpg)
do
# Generate new name with zero-padded sequence number
new=$(printf "%04d_$f" $seq)
echo Rename $f as $new
# Remove "#" from start of following command if things look good so the renaming is actually done
# mv "$f" $new"
((seq++))
done
但是,我正在尝试与我的Component的子项共享一个实例,我通过new手动实例化了它,如:
@Component({
selector: 'Starwars',
directives: [ShoppingComponent],
template: `<shopping></shopping>`,
providers: [CartActions]
})
也尝试了这些没有运气:
export class Starwars {
private appStore:any;
constructor() {
this.appStore = new AppStore();
// tried this with no luck
var injector = Injector.resolveAndCreate([
provide(AppStore, {useValue: this.appStore})
]);
// tried this with no luck
provide(AppStore, {useFactory: () => {
return this.appStore;
}})
}
}
以及useClass ...正如我所说的那样,我正在尝试与我的组件的子项共享一个手动实例化的类,而不是我依赖注入的组件并且让Angular2为我实例化...
答案 0 :(得分:1)
这是Angular 2中不可能的AFIK。
例如,有一些方法可以通过DynamicComponentLoader
在运行时动态注入组件。但我们不能覆盖该组件的提供者,它们在组件元数据中,在运行时通过闭包进行保护,无法编辑。没有与依赖注入相关的生命周期钩子。
根本没有机制允许您尝试做什么, 实际上有一些机制可以避免它,就像提供者只读一样。没有允许在运行时从组件调用的提供程序类型。
看起来您尝试的是不可能的设计。这可能是一件好事,因为它避免了以意想不到的方式使用依赖注入机制。