2017-02-17 18 views
2

在此plunker中,我試圖用自定義註釋修飾MyModel上的屬性。取消註釋與定製的裝飾或取消註釋import 'reflect-metadata';和內聯裝飾屬性生成屬性:在角度應用中引用反射元數據或等效物的正確方法

Error: Cannot resolve all parameters for 'Parser'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'Parser' is decorated with Injectable. at NoAnnotationError.ZoneAwareError 

我可以取消註釋只是內嵌裝飾,但在編輯器中沒有import 'reflect-metadata';你沒有得到的代碼有關metadata()不是Reflect的屬性的自動完成和tsc錯誤。

在角度中使用反射API的正確方法是什麼?

編輯:
有了一個新的@角/ CLI genrated應用程序,你必須在pollyfills.tsimport 'core-js/es7/reflect';,但你仍然可以得到Property 'metadata' does not exist on type 'typeof Reflect'.如果您嘗試Reflect.metadata()

EDIT2的任意組合: 我貌似有這個工作通過在pollyfills.ts替換import 'core-js/es7/reflect';import 'reflect-metadata';,但我不知道他們是否是一對一替換或如果有分枝。這裏的答案並不清楚。 Angular2 using either npm reflect-metadata or core-js/es7/reflect

+0

我只是碰到了這個錯誤,你是唯一我發現至今已經受夠了。我不需要導入任何東西來工作,但是當然tsc抱怨'Reflect'上不存在'defineMetadata'。我很茫然 – adamk33n3r

回答

0

我只是偶然發現this article這可能會有所幫助。 我猜想「第二個問題」的部分可能會讓你感興趣。我面臨着同樣的問題,試圖在角度應用程序中定義一些元數據,並且似乎角度提供了與窗口不同的反射。所以訪問窗口反映似乎解決了我的問題。我使用:的

let reflect = window['Reflect']; 
reflect.defineMetadata(metadataKey, metadataValue, target); 

代替

Reflect.defineMetadata(metadataKey, metadataValue, target); 
相關問題