当前位置: 首页 > news >正文

angular2 学习一 注解/Annotation

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

注解/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完成的:

annotation

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

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

修改示例代码中的EzApp组件,不用注解实现同样的功能。

HT

<!doctype html>
<html>
<head>
	<meta charset="utf-8">
    <title>hello,angular2</title>
    <!--模块加载器-->
    <script type="text/javascript" src="lib/system@0.16.11.js"></script>
    <!--Angular2模块库-->
    <script type="text/javascript" src="lib/angular2.dev.js"></script>
	<script>
    	//设置模块加载规则
    	System.baseURL = document.baseURI;
		System.config({
        	map:{traceur:"lib/traceur"},
			traceurOptions: {annotations: true}
		});
	</script>	    
</head>
<body>
	<!--组件渲染锚点-->
	<my-app></my-app>
    
    <!--定义一个ES6脚本元素-->
    <script type="module">
    	//从模块库引入三个类型定义
        import {Component,View,bootstrap} from "angular2/angular2";
        
        //组件定义
        @Component({selector:"my-app"})
        @View({template:"<h1>Hello,Annotation</h1>"})
        class EzApp{}       
                
        //渲染组件
        bootstrap(EzApp);
    </script>
</body>
</html>

CSS

h1{background:black;color:white;display:inline-block}

 

转载于:https://my.oschina.net/martin123/blog/797684

相关文章:

  • Android输入事件详解
  • HTML基础第十一讲---背景标志
  • Linux使用mount挂载samba共享
  • 由socket的accept说开去
  • CentOS 6.7安装Sqoop 1.4.6
  • SELinux上课内容
  • 浅谈Android编码规范及命名规范
  • 实现一些常用字符串处理函数
  • [摘录]第11章 造就优势谈判的驱动力
  • java调用斑马GK888t打印机(ZPL指令)
  • 允许chrome 浏览器运行 flash player
  • 注解的使用
  • hadoop各个组件功能
  • 命令行创建虚拟机,无桌面运行virtualbox
  • 一次arp防护配置错误导致的故障
  • [LeetCode] Wiggle Sort
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017届校招提前批面试回顾
  • JavaScript 基础知识 - 入门篇(一)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • leetcode46 Permutation 排列组合
  • MySQL主从复制读写分离及奇怪的问题
  • python3 使用 asyncio 代替线程
  • Sublime text 3 3103 注册码
  • Tornado学习笔记(1)
  • 力扣(LeetCode)965
  • 聊聊sentinel的DegradeSlot
  • 前端js -- this指向总结。
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我看到的前端
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 用jQuery怎么做到前后端分离
  • 阿里云API、SDK和CLI应用实践方案
  • 带你开发类似Pokemon Go的AR游戏
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​520就是要宠粉,你的心头书我买单
  • #Java第九次作业--输入输出流和文件操作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2.2w字)前端单元测试之Jest详解篇
  • (39)STM32——FLASH闪存
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)h264中avc和flv数据的解析
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)Linux网络编程入门
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net core 6.0 升8.0
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET学习教程二——.net基础定义+VS常用设置
  • ?.的用法