2015-05-29 74 views
20

在研究ES6,JSPM & angular2了一個星期了,我發現這個回購ES6-loader任何人都可以解釋什麼es7反映 - 元數據是關於?

如果我們看一下在底部腳本中的index.html你會看到

System.import('reflect-metadata') 
    .then(function() { 
    return System.import('app/index'); 
    }) 
    .catch(console.log.bind(console)); 

這是使用JSPM的systemjs polyfill來獲得ES6的import

問題:在這種情況下,反射元數據究竟做了什麼? npm reflect-meta我越閱讀文檔,我越不理解它的作用?

+0

不知道是什麼的index.html你的意思是,如果它是https://github.com/angular/quickstart/blob/master/ index.html,那麼reflect-metadata/Reflect.js是一個增強的庫:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect有時會使用它TypeScript編譯器(tsc)吐出的代碼 – dalvarezmartinez1

回答

43

'reflect-metadata'是一個包是ES7的建議。它允許將元數據包含到類或函數中;本質上是syntax sugar

例子。 角2 ES6:

@Component({selector: "thingy"}) 
@View({template: "<div><h1>Hello everyone</h1></div>"}) 
class Thingy{}; 

正如你可以看到有@Component和@View後沒有分號。這是因爲它們實際上是類(元)數據的鏈。

現在讓我們來看看同樣的代碼在角2,但在ES5:

function Thingy(){} 
Thingy.annotations = [ 
    new angular.ComponentAnnotation({ 
     selector: "thingy" 
    }), 
    new angular.ViewAnnotation({ 

     template: "<div><h1>Hello everyone</h1></div>" 
    }) 
]; 

正如你所看到的@符號抽象了很多類的註釋財產,並使得它更D.R.Y

更進一步Angular團隊知道註釋對於新用戶來說有點抽象。而且,ES5實在太冗長了。這就是爲什麼他們作出a.js這將使帶有註釋的接口更好:

Video to understand this

+3

很好的答案。謝謝。 –

+1

什麼是a.js?我的評論還不夠長 –

+0

@gyozokudor a.js是angular 2和es5的項目。看起來asif角色2團隊可能已經停止了這個項目。 –

相關問題