zoukankan      html  css  js  c++  java
  • Angular2入门(三)

    注解/Annotation

    你一定好奇@Component和@View到底是怎么回事。看起来像其他语言(比如python) 的装饰器,是这样吗?

    ES6规范里没有装饰器。这其实利用了traceur的一个实验特性:注解。给一个类 加注解,等同于设置这个类的annotations属性:

    1 //注解写法
    2 @Component({selector:"ez-app"})
    3 class EzApp{...}

    与下面的写法产生的效果相同

    1 class EzApp{...}
    2 EzApp.annotations = [new Component({selector:"ez-app"})];

    很显然,注解可以看做编译器(traceur)层面的语法糖,但和python的装饰器不同, 注解在编译时仅仅被放在annotation里,编译器并不进行解释展开 - 这个解释的工作是 Angular2完成的:

    据称,注解的功能就是Angular2团队向traceur团队提出的,这不是traceur的默认选项, 因此你看到,配置systemjs在使用traceur模块时打开注解:

    1 System.config({
    2   map:{traceur:"lib/traceur"},
    3   traceurOptions: {annotations: true}
    4 });

    例如:

     1 <!doctype html>
     2 <html>
     3 <head>
     4     <meta charset="utf-8">
     5     <title>hello,angular2</title>
     6     <!--模块加载器-->
     7     <script type="text/javascript" src="lib/system@0.16.11.js"></script>
     8     <!--Angular2模块库-->
     9     <script type="text/javascript" src="lib/angular2.dev.js"></script>
    10     <script>
    11         //设置模块加载规则
    12         System.baseURL = document.baseURI;
    13         System.config({
    14             map:{traceur:"lib/traceur"},
    15             traceurOptions: {annotations: true}
    16         });
    17     </script>        
    18 </head>
    19 <body>
    20     <!--组件渲染锚点-->
    21     <ez-app></ez-app>
    22     
    23     <!--定义一个ES6脚本元素-->
    24     <script type="module">
    25         //从模块库引入三个类型定义
    26         import {Component,View,bootstrap} from "angular2/angular2";
    27         
    28         //组件定义 (注解写法)
    29         //@Component({selector:"ez-app"})
    30         //@View({template:"<h1>Hello,Annotation</h1>"})
    31         //class EzApp{} 
    32         
    33         //组件定义 (非注解写法)
    34         class EzApp{} 
    35         EzApp.annotations = [new Component({selector:"ez-app"}),
    36         new View({template:"<h1>Hello,Annotation</h1>"})];
    37                 
    38         //渲染组件
    39         bootstrap(EzApp);
    40     </script>
    41 </body>
    42 </html>
  • 相关阅读:
    WebGL-四之二
    WebGL-四之一
    mybatis中批量更新的问题
    nginx+tpmcat+redis实现session共享
    myeclipse快捷方式汇总
    StringBuffer的append方法比“+”高效
    《Thinking in Java》 And 《Effective Java》啃起来
    JAVA链表中迭代器的实现
    myeclipse从SVN检出项目报错
    C#中清空ListView中的数据
  • 原文地址:https://www.cnblogs.com/gett/p/5036311.html
Copyright © 2011-2022 走看看