为什么要做这个东西呢?

嗯 为了证明自己会ng吧,最主要的是这几天的工作全是静态页,实在无聊枯燥的很。当然了,肯定还有其他妙不可言的原因,这里不想说出来。

我也忘记我是什么时候有想到用ng做俄罗斯方块的了,但能想到的原因有两个,其一: 目前前端界流行的三大框架中,唯一具备完善的模块系统的,只有ng,只有ng,只有ng!怎么说呢,关于这三个框架的区别,有个人讲得特别好:

React:服务员牵来一头牛,给了顾客主厨刀、削皮刀、剔骨刀、片刀、砍刀、美工刀……堆满在桌上,笑道,请享用!顾客一脸懵逼,但看到邻桌的老大爷用挥舞双截棍的姿势使用美工刀切出一块完美的牛排,于是也模仿起来。后来他住院了。 
Angular:服务员端上牛排和餐具,笑道,请享用!顾客吃得正开心,服务员又端来一块牛排,笑道,我们有新版本的牛排,请您务必重新开始吃,但食用前请将你您刚吃下的牛排吐干净。 
Vue:这间餐馆的装修和上面两家有很多地方都一模一样,但是到处都贴着大大小小的横幅:我们这家比上面两家都好! 
---大漠穷秋

嗯就是2017年撕逼的那个男人,上面他说的这些ng除了 1 -> 2 的时候变化特别大之外,ng就真的找不到其他缺点了。react:很好的UI,一旦跨组件通信,自身就根本不完善,只能借助redux。vue不做评价。

其二是因为,前几天研究vscode插件开发的时候阴差阳错的打开了vscode的开发者工具,我看到在编辑完成这一行的时候,当光标移开之后,这一行似乎就消失了,于是我联想到 能不能在开发俄罗斯方块的时候可以使运动中的形状和实际显示的形状分开成为两个组件。

当我开始写这个项目的时候大体上整个流程我脑子里边已经过了一遍,后续的开发只是百无聊赖的各种判断和处理实际开发中遇到的bug。

截至目前(2018-3-30 17点)一共完成了三个形状的组建的开发,一共用了差不多两天的时间。如果用原生js完成的话估计代码量至少会翻一倍,时间成本估计也差不多,ng为我处理了一些极其细微又容易重复的操作,诸如,这个项目中对元素的显示隐藏操作看点很频繁,而这一点我却一点都不必费神,还有容器组建的渲染如果使用原生js开发,一定会很麻烦。或许这就是我要使用ng的另一个重要原因把。

我不知道应不应该把项目开发中遇到的坑记录下来,因为前端技术更迭的太快,以后有没有ng都说不准,不过还是多少记一下把,毕竟有些坑 还是真的坑啊。

  • 首先是指令,组件都需要在根模块里边声明,我相信绝大多数人会声明组件,而忘记声明指令,另外动态组建,需要在跟模块里声明为  entryComponents  

  • 再说说动态组建,动态组建使用的时候要有载体,载体可以使用viewchild配合指令获得,有了载体之后需要使用  componentFactoryResolver的resolveComponentFactory方法装载,最后使用载体的createComponent方法装载组建。说起来实在很繁琐不如直接看我github

  • 动态组建装载之后可以拿到他的实例对象然后就可以进行一系列操作了。

  • 另外就是keydown和keypress事件的坑了,这当然不算ng的坑,最后解决的方案是给document和绑定事件,并通过bind方法改变this。

基本的坑就是这些啦,以后能想到再说吧!

想说的有很多,无奈五年的老伙计是在卡的不行,只能先到这儿了,以后有机会再补充。

2018-03-29 20-42

我感觉想说的已经说完了

2018-03-30 17-43

这几天用ng5做了一个俄罗斯方块的更多相关文章

  1. 做了一个sublime text插件

    做了一个sublime text插件,可以方便地查看C++/python的调用图.插件的演示视频在这里: http://list.youku.com/albumlist/show?id=2820226 ...

  2. 做为一个前端工程师,是往node方面转,还是往HTML5方面转

    文章背景:问题本身来自于知乎,但是我感觉这个问题很典型,有必要把问题在整理一下,重新分享出来. 当看到这个问题之前,我也碰到过很多有同样疑惑的同学,他们都有一个共同的疑问该学php还是nodejs,包 ...

  3. bootstrap做了一个表格

    花了一下午做了一个表格: 大致是这样: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf ...

  4. PHP MVC简单介绍,对PHP当前主流的MVC做了一个总结

    东抄西抄,对PHP当前主流的MVC做了一个总结PPT. 希望对初学者有点帮助! PHP MVC初步.ppt

  5. 用MVVM做了一个保存网页的工具-上篇

    前言: 你是否有过收藏了别人博客或文章,当想用的时候却找不到?你是否有过收藏了别人博客或文章,却因为没有网络而打不开网页?OK,下面是我做的一个工具,有兴趣的同学们可以download 玩下,哈哈^. ...

  6. php大力力 [042节] 今天做了一个删除功能

    php大力力 [042节] 今天做了一个删除功能 if(isset($_GET['action'])){ if($_GET['action']=="del"){ $sql = &q ...

  7. 做了一个简易的git 代码自动部署脚本

    做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08)   阅读(200 ...

  8. 用原生javascript做的一个打地鼠的小游戏

    学习javascript也有一段时间了,一直以来分享的都是一些概念型的知识,今天有空做了一个打地鼠的小游戏,来跟大家分享一下,大家也可以下载来增加一些生活的乐趣,下面P出代码:首先是HTML部分代码: ...

  9. 利用SCI做的一个足球答题系统

    SCI,异步串行通信接口,内置独立的波特率产生电路和SCI收发器,可以选择发送8或9个数据位(其中一位可以指定为奇或偶校验位). SCI是全双工异步串行通信接口,主要用于MCU与其他计算机或设备之间的 ...

  10. 高仿“点触验证码”做的一个静态Html例子

    先上源码: <html> <head> <title>TouClick - Designed By MrChu</title> <meta htt ...

随机推荐

  1. Qt编写可视化大屏电子看板系统28-模块6送检合格

    一.前言 送检合格率模块包括钢件合格率.电机合格率.当天合格率.模具零件合格率四个子模块,其中钢件合格率和电极合格率都是采用的曲线图展示,统计的15天内的合格率,定位线放在90这个值的位置,相当于90 ...

  2. [转]Linux系统下的GCC编译过程、使用命令详解(多文件编译、动态库、静态库)

    Linux系统下的GCC编译过程.使用命令详解(多文件编译.动态库.静态库) [Linux]gcc简介+编译过程 翻译 搜索 复制

  3. IM跨平台技术学习(六):网易云信基于Electron的IM消息全文检索技术实践

    本文作者网易云信高级前端开发工程师李宁,本文有修订. 1.引言 在IM客户端的使用场景中,基于本地数据的全文检索功能扮演着重要的角色,最常用的比如:查找聊天记录.联系人等. 类似于IM中的聊天记录查找 ...

  4. IM跨平台技术学习(五):融云基于Electron的IM跨平台SDK改造实践总结

    本文由融云技术团队分享,有修订和改动. 1.引言 Electron 凭借其相对更低的研发成本投入.强大的跨平台支持.拥有基数庞大的 Javascript 开发者受众等优势,在 PC 端跨平台桌面开发领 ...

  5. 探索自联接(SELF JOIN):揭示数据间复杂关系的强大工具

    title: 探索自联接(SELF JOIN):揭示数据间复杂关系的强大工具 date: 2025/1/11 updated: 2025/1/11 author: cmdragon excerpt: ...

  6. 彻底讲透Spring Bean生命周期,源码深度剖析!

    前言本篇文章主要是要介绍如何在Spring IoC 容器中 如何管理Spring Bean生命周期. 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打 ...

  7. K_V键值存储对比

    memcached-键值存储 redis-键值存储 RocksDB-键值存储 KeyDB-键值存储 DynamoDB-键值存储 levelDB-键值存储 etcd-键值存储 Redis与其他数据库对比 ...

  8. Ping测试记录脚本

    @echo off echo PingTest del PingTest_result.txt timeout /t 10 echo=> PingTest_result.txt :TEST ec ...

  9. webstorm前端vue项目安装依赖包总结

    npm install提示错误信息,与node.js版本有关.以下是用到的一些命令行参数: 1.清除npm的缓存:npm cache clean --force 2.设置npm下载镜像:npm con ...

  10. dart 中在实例化 new 关键字可以省略不写

    dart 中在实例化 new 关键字可以省略不写 class Person { String name; int age; String sex; Person(this.name, this.age ...