Javascript中的Angular2,关于装饰器

use*_*044 5 javascript angular

我在Angular2食谱中看到,我们可以使用annotations数组来提供元数据,并将一个以上的Typescript装饰器附加到构造函数上.

我们还可以使用以下语法浏览类便捷API:

(function(app){

    var HEROES = app.HEROES;

    app.HeroService = 
        ng.core.Injectable().Class({
            constructor: function(){},
            getHeroes : function(){
                return Promise.resolve(HEROES);
            }
        });

})(window.app || (window.app = {}))
Run Code Online (Sandbox Code Playgroud)

1.但是,如果我想连接两个装饰?我怎样才能做到这一点?似乎这一大块代码有效.如果我想要两个装饰器,这是正确的方法吗?

(function(app){

    var HEROES = app.HEROES;

    app.HeroService = 

        ng.core.Class({
            constructor: function(){},
            getHeroes : function(){
                return Promise.resolve(HEROES);
            }
        });

    app.HeroService = ng.core.Injectable(/*...*/)(app.HeroService);
    app.HeroService = ng.core.Component(/*...*/)(app.HeroService);

})(window.app || (window.app = {}))
Run Code Online (Sandbox Code Playgroud)

2.然后,就是用注解阵列便利的区别?什么是最常用的语法?

其他问题,我认为下面的代码是有效的:

(function(app){

    var HEROES = app.HEROES;

    app.HeroService = 

        ng.core.Class({
            constructor: function(){},
            getHeroes : function(){
                return Promise.resolve(HEROES);
            }
        });
    //Optional, why ?
    //app.HeroService = ng.core.Injectable()(app.HeroService);

})(window.app || (window.app = {}))
Run Code Online (Sandbox Code Playgroud)

3.我在我的应用程序的许多其他组件中使用此服务.Injectable函数是可选的,因为我不提供metadatas吗?或者我错过了一个重要的Angular概念?

4.关于ng.core命名空间的最后一个问题,这什么区别:

(function(app){
    var HEROES = app.HEROES;
    app.HeroService = 
        ng.core.Class({
            constructor: function(){},
            getHeroes : function(){
                return Promise.resolve(HEROES);
            }
        });
})(window.app || (window.app = {}))
Run Code Online (Sandbox Code Playgroud)

还有这个:

(function(app){

    var HEROES = app.HEROES;

    app.HeroService = function(){
        this.getHeroes = function(){
            return Promise.resolve(HEROES);
        }
    }

})(window.app || (window.app = {}))
Run Code Online (Sandbox Code Playgroud)