⑴ 设计模式js阮一峰
有面向对象基础自学前端想达到找工作的水平要多长时间需要看哪些书呢客观的讲自学的话还是要看你自己的毅力和恒信,这个是最重要的,其次是学习的方法和方向。
首先说网站前端在目前来说需求还是很大的,但是需要的不是初级的前端而是高级前端,因为一般学习计算机的人自己学几个月就能到初级的水平,而高级前端是没有那么容易的,你说的面向对象思想是一个很好的思想,不只是纯编程用,现在网站前端也需要面向对象思想的指导。
1、关于学习时间
如果自己有毅力恒信和充足的时间来自学,加上正确的方法和方向,一般需要1年左右的时间的可以勉强到中级前端的水平,首先明确中级前端不只是些css代码,而是对javaScript有深入的了解,且使用JavaScript来解决前端中的一些问题和优化前端页面。补充一下从入门到精通的大致流程:html、css2(深入了解两者的兼容性及解决主流浏览器的兼容性问题)——javascript知识(了解其简单的框架或者类库如jQuery等)——javascript高级知识(了解一些深入的JavaScript知识和其一些闭缺高级框架如angularjs等)——移动端页面的开发html5+css3(同时要学习一些移动端的前端框架和JavaScript框架)——可以发webapp(精通js和其相关的框架且懂一些安卓或者ios知识)。当我们到第三个阶段或者第四个阶段就是可以算中级的前端的了。
2、关于学习的方法和推荐的书
首先说现在网上的资源是相当的丰富的,我们完全可以下载一些视频或者其他的资源惊醒学习,关于推荐的书,个人推荐基本就自己感觉非常不错的书和一些网上评价宴世不错的书,都是关于JavaScript的。
入门级,也适合想掌握一些前端技能的非前端工程师
JavaScriptDom编程艺术
成为一名合格的前端工程师
JavaScript高级程序设计
精通JavaScript
更优秀的代码,更优良的设计JavaScript语言精粹
JavaScript设计模式
同时建议看国内知名大牛的博客,如王福朋、阮一峰等,其博客上有大师门对晌态肢前端深入的理解。
为什么昨天阮一峰老师发布全栈工程师资料中主要学习react和node,js
JavaScript是一种(最好的)编程语言,主要作为前端开发中用来增加网页的动态功能。
NodeJs是基于JavaScript的,可以做为后台开发的语言.提供了很多系统级的API,如文件派斗贺操作、网络编程等.用事件驱动,异步编程,主要尘派是为后台网络服务设计。
ReactJS为Facebook开发的,更多的像一个JS的库.主要是在前端Web开发中,对MVC中的V进销烂行操作。
ReactNative它基于开源框架ReacJS,并可用来开发iOS和Android原生应用,主要为移动端服务。
GitHub上有哪些值得推荐的开源电子书语言无关类
操作系统
鸟哥的Linux私房菜(简体)
Linux系统高级编程
TheLinuxCommandLine(中英文版)
Linux设备驱动(第三版)
深入分析Linux内核源码
UNIXTOOLBOX
Docker中文指南
Docker——从入门到实践
FreeRADIUS新手入门
Mac开发配置手册
FreeBSD使用手册
Linux命令行(中文版)
智能系统
一步步搭建物联网系统
web服务器
Nginx开发从入门到精通(淘宝团队出品)
版本控制
Git教程(本文由?@廖雪峰创作,如果觉得本教程对您有帮助,可以去?iTunes购买)
git–简易指南
猴子都能懂的GIT入门
Git参考手册
ProGit
GitMagic
GotGitHub
GitCommunityBook中文版
Mercurial使用教程
HgInit(中文版)
沉浸式学Git
Git-Cheat-Sheet(感谢@flyhigher139翻译了中文版)
GitHub秘籍
NoSQL
NoSQL数据库笔谈(PDF)
Redis设计与实现
Redis命令参考
带有详细注释的Redis3.0代码
带有详细注释的Redis2.6代码
TheLittleMongoDBBook
TheLittleRedisBook
Neo4j简体中文手册v1.8
Neo4j.rb中文资源
MySQL
MySQL索引背后的数据结构及算法原理
项目相关
持续集成(第二版)(译言网)
让开发自动化系列专栏
追求代码质量
selenium中文文档
Joel谈软件
约耳谈软体(JoelonSoftware)
Web
关于浏览器和网络的20项须知
前端知识体系
浏览器开发工具的秘密
Chrome开发者工具中文手册
Chrome扩展开发文档
Grunt中文文档
移动Web前端知识库
正则表达式30分钟入门教程
前端开发体系建设日记
移动前端开发收藏夹
JSON风格指南
HTTP接口设计指北
前端资源分享(一)
前端资源分享(二)
前端代码规范及最佳实践
w3school教程整理
大数据/数据挖掘/推荐系统/机器学习相关资源
编程艺术
程序员编程艺术
每个程序员都应该了解的内存知识(译)【第一部分】
取悦的工序:如何理解游戏(豆瓣阅读,免费书籍)
其他
OpenWrt智能、自动、透明翻墙路由器教程
语言相关类AWK
awk程序设计语言
C/C++
C++并发编程指南(@傅海平ICT)
LinuxC编程一站式学陪袭枯习(宋劲杉,北京亚嵌教育研究中心)
CGDB中文手册
100个gdb小技巧
100个gcc小技巧禅碰
ZMQ指南
(中英文版)
跟我一起写Makefile(PDF)
GNUmake中文手册
GNUmake指南
GoogleC++风格指南
C/C++Primer(by@andycai)
简单易懂的C魔法
Cmake实践(PDF版)
C++FAQLITE(中文版)
C++Primer5thAnswers
CSS/HTML
学习CSS布局
通用CSS笔记、建议与指导
CSS参考手册
Emmet文档
前端代码规范(腾讯alloyteam团队)
Dart
Dart语言导览
Fortran
Fortran77和90/95编程入门
Java
实时Java系列
ApacheShiro用户指南
使用Eclipse和JavaSE6创建独立WebServices应用程序
第1部分:WebServices服务端应用程序
第2部分:Web服务客户端应用程序
JavaServerFaces1.2入门
第1部分:构建基本应用程序
第2部分:JSF生命周期、转换、检验和阶段监听器
用EclipseEuropa进行Web开发
第1部分:EclipseJavaEE
第2部分:PHP开发工具
第3部分:RubyDevelopmentToolkit和RadRails
使用JavaServerFaces构建芦洞ApacheGeronimo应用程序
第1部分:使用Eclipse和ApacheMyFacesCore构建基本的应用程序
第2部分:在JavaServerFaces中使用Tomahawk
第3部分:使用ajax4jsf添加Ajax功能
第4部分:使用ApacheTrinidad组件扩展JSF
第5部分:将JSF应用程序与Spring集成
ApacheGeronimo和Spring框架
第1部分:开发方法学
第2部分:构建第一个应用程序
第3部分:集成DAO与ORM
第4部分:混合使用SpringAOP和SpringWebFlow
第5部分:SpringMVC
第6部分:SpringMVC:使用Web视图技术
终极mashup——Web服务和语义Web
第1部分:使用与组合Web服务
第2部分:管理Mashup数据缓存
第3部分:理解RDF和RDFs
第4部分:创建本体
第5部分:切换Web服务
Jersey2.x用户指南
MyBatis中文文档
JavaScript
GoogleJavaScript代码风格指南
AirbnbJavaScript规范
JavaScript标准参考教程(alpha)
Javascript编程指南(源码)
javascript的12个怪癖
JavaScript秘密花园
JavaScript核心概念及实践(PDF)(此书已由人民邮电出版社出版发行,但作者依然免费提供PDF版本,希望开发者们去购买,支持作者)
《JavaScript模式》翻译,此书中文版有售,但是纸质书翻译的还没有这个版本翻译的好
命名函数表达式探秘(注:原文由为之漫笔翻译,原始地址无法打开,所以此处地址为我博客上的备份)
学用JavaScript设计模式(开源中国)
深入理解JavaScript系列
ECMAScript6入门(作者:阮一峰)
jQuery
jQuery解构
简单易懂的JQuery魔法
HowtowritejQueryplugin
Node.js
Node入门
七天学会NodeJS
NodejsWikiBook(繁体中文)
express.js中文文档
koa中文文档
使用Express+MongoDB搭建多人博客
Express框架
nodejs文档
Node.js包教不包会
LearnYouTheNode.jsForMuchWin!(中文版)
Nodedebug三法三例
underscore.js
Underscore.js中文文档
backbone.js
backbone.js入门教程(PDF)
Backbone.js入门教程第二版
DevelopingBackbone.jsApplications(中文版)
AngularJS
AngularJS最佳实践和风格指南
AngularJS中译本
AngularJS入门教程
构建自己的AngularJS
在Windows环境下用Yeoman构建AngularJS项目
zepto简明中文手册
Sea.js
HelloSea.js
CoffeeScript
CoffeeScriptCookbook
TheLittleBookonCoffeeScript中文版
ExtJS
Ext4.1.0中文文档
Chrome扩展及应用开发
JavaScript入门教程
PHP
PHP调试技术手册(PDF)
XDebug2中文手册(译)(CHM)
PHP之道
PHP最佳实践
PHP安全最佳实践
深入理解PHP内核
PHP扩展开发及内核应用
CodeIgniter用户指南
Laravel4中文文档
Laravel入门
Symfony2中文文档(未译完)
Phalcon中文文档(翻译进行中)
YiiBook几本Yii框架的在线教程
简单易懂的PHP魔法
swoole文档及入门教程
iOS
iOS开发60分钟入门
iOS7人机界面指南
GoogleObjective-CStyleGuide中文版
iPhone6屏幕揭秘
AppleWatch开发初探
马上着手开发iOS应用程序
网易斯坦福大学公开课:iOS7应用开发字幕文件
Android
AndroidDesign(中文版)
GoogleAndroid官方培训课程中文版
Android学习之路
Python
小白的Python教程
简明Python教程
零基础学Python
Python2.7官方教程中文版
Python3.3官方教程中文版
深入Python3
PEP8Python代码风格规范
GooglePython风格指南中文版
Python入门教程(PDF)
Python的神奇方法指南
笨办法学Python(PDF版下载)
Django文档中文版
Django最佳实践
TheDjangoBook中文版
web.py0.3新手指南
Web.pyCookbook简体中文版
DiveIntoPython中文版
Bottle文档中文版(需翻墙)
Flask文档中文版
Jinja2文档中文版
Werkzeug文档中文版
Flask之旅
IntroctiontoTornado中文翻译
Python自然语言处理中文版(感谢陈涛同学的翻译,也谢谢?@shwley联系了作者)
Python绘图库matplotlib官方指南中文翻译
Scrapy0.25文档
ThinkPython
Ruby
Ruby风格指南
Rails风格指南
笨方法学Ruby
RubyonRails指南
RubyonRails实战圣经
RubyonRailsTutorial原书第2版(本书网页版免费提供,电子版以PDF、EPub和Mobi格式提供购买,仅售9.9美元)
编写Ruby的C拓展
Ruby源码解读
Shell
Shell脚本编程30分钟入门
Go
Go编程基础
Go入门指南
学习Go语言(PDF)
GoWeb编程(此书已经出版,希望开发者们去购买,支持作者的创作)
Go实战开发(当我收录此项目时,作者已经写完第三章,如果读完前面章节觉得有帮助,可以给作者捐赠,以鼓励作者的继续创作)
NetworkprogrammingwithGo中文翻译版本
Groovy
实战Groovy系列
LaTeX
一份其实很短的LaTeX入门文档
一份不太简短的LATEX2ε介绍(PDF版)
LISP
ANSICommonLisp中文翻译版
Lua
Lua编程入门
Haskell
RealWorldHaskell中文版
R
R语言忍者秘笈
Scala
Scala课堂(Twitter的Scala中文教程)
EffectiveScala(Twitter的Scala最佳实践的中文翻译)
Scala指南
Swift
TheSwiftProgrammingLanguage中文版
Perl
ModernPerl中文版
Perl程序员应该知道的事
Prolog
笨办法学Prolog
Vim中文文档
Vimscript
笨方法学Vimscript中译本
Vim中文文档
读书笔记及其它读书笔记
编译原理(紫龙书)中文第2版习题答案
把《编程珠玑》读薄
EffectiveC++读书笔记
Golang学习笔记、Python学习笔记、C学习笔记(PDF)
Jsoup学习笔记
学习笔记:Vim、Python、memcached
图灵开放书翻译计划–C++、Python、Java等
蒂姆·奥莱利随笔(由译言网翻译,电子版免费)
Octave入门(PDF版)
SICP解题集
精彩博客集合
正则表达式简明参考
学习前端,有什么好书推荐吗?对于零基础想小白,想要自学成为前端人才,可以看看以下书籍
《图解HTTP》:一本HTTP的神书,图文并茂,生动形象,中猜非常适合小白学习。
《HeadFirstHTML与CSS(第2版)》:入门真的是经典书籍,手把手教学,丰富的案例让你从0开始学前端。
《锋利的jQuery》:作为第一本原因是jQuery入门快,你不会因为js的晦涩难懂而止步不前,因为学习jQuery后你可以自己写一些可以即使看到效果的小项目从而提升兴趣。
《Javascript高级程序设计》:书中涉及的概念基本涵盖了js的大部分内容,包括作用域链、js数据类型、OOP对象在js中的实现、闭包、BOM和DOM模型、对变态IE的系列兼容的解决方案、事件流、还有xml、jason、E4X这些数据格式与js的交互操作简介、高级技巧的介绍(比如惰性载入)等等
《高性能JavaScript》:揭示了技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM交互、页面生存周期等。
《JavaScript设计模式与开发实践》:腾讯前端AlloyTeam团队出品,综合讲述前端的设计模式,设计原则,编程技巧,旁盯代码重构等等。
《CSS世界》:CSS和javascript一样,都是很容易上手,却很难精通的。这本是前端知名博主张鑫旭的书籍,好评很多,讲的很细致。
《CSS揭秘》:CSS进阶必备书籍,47个css技巧让你在面对各种css问题的时候游刃有余。
《深入浅出Node.js》:针对Node的基本原理卖启型做了深入,能让你了解底层的Node实现
⑵ 推荐个入门angularjs 的好书,谢谢
angularjs是前端JavaScript中一种新的框架而且有跨时代的意义。
1、首先是其angularjs解决了JavaScript开发中频繁获取DOM操作的DOM的工作,完全解放了这个繁琐的操作,完全不同于jQuery只将DOM操作封装简化。
2、AngularJS试图成为WEB应用中的一种端对端的解决方案。这意味着它不只是你的WEB应用中的一个小部分,还是一个完整的端对端的解决方案。
3、AngularJS为开发者呈现一个更高层次的抽象来简化应用的开发。
以上是个人对angularjs的一些优点的看法。
对于推荐的书籍:
1、对于初学者,个人推荐《angularjs权威教程》这本书,这本书是国外的作品但是有中文翻译版,对于入门的初学者这本书完全够用,完全弄懂这本书基本就能是一个中级的水平了。
最后,建议学习angular可以结合网上一些免费的视频和官网的文档来进行学习,这些可以让学习者在较短的时间内迅速的掌握基础知识入门。
⑶ angularjs官网为什么上不去了
若您遇到了无法访问AngularJS官网API的情况,可以尝试访问AngularJS爱好者们创建的一个开发指南中文翻译项目展示站点。此站点提供了API内容,当前主要展示1.2.3版本,未来将根据时间安排更新至最新版本。相信这将对您有所帮助。
⑷ GitHub 上有哪些值得推荐的开源电子书
语言无关类
操作系统
鸟哥的Linux私房菜 (简体)
Linux 系统高级编程
The Linux Command Line (中英文版)
Linux 设备驱动 (第三版)
深入分析Linux内核源码
UNIX TOOLBOX
Docker中文指南
Docker —— 从入门到实践
FreeRADIUS新手入门
Mac 开发配置手册
FreeBSD 使用手册
Linux 命令行(中文版)
一步步搭建物联网系统
Nginx开发从入门到精通 (淘宝团队出品)
Git教程 (本文由 @廖雪峰 创作,如果觉得本教程对您有帮助,可以去 iTunes 购买)
git – 简易指南
猴子都能懂的GIT入门
Git 参考手册
Pro Git
Git Magic
GotGitHub
Git Community Book 中文版
Mercurial 使用教程
HgInit (中文版)
沉浸式学 Git
Git-Cheat-Sheet (感谢 @flyhigher139 翻译了中文版)
GitHub秘籍
NoSQL数据库笔谈 (PDF)
Redis 设计与实现
Redis 命令参考
带有详细注释的 Redis 3.0 代码
带有详细注释的 Redis 2.6 代码
The Little MongoDB Book
The Little Redis Book
Neo4j 简体中文手册 v1.8
Neo4j .rb 中文资源
MySQL索引背后的数据结构及算法原理
持续集成(第二版) (译言网)
让开发自动化系列专栏
追求代码质量
selenium 中文文档
Joel谈软件
约耳谈软体(Joel on Software)
关于浏览器和网络的 20 项须知
前端知识体系
浏览器开发工具的秘密
Chrome 开发者工具中文手册
Chrome扩展开发文档
Grunt中文文档
移动Web前端知识库
正则表达式30分钟入门教程
前端开发体系建设日记
移动前端开发收藏夹
JSON风格指南
HTTP 接口设计指北
前端资源分享(一)
前端资源分享(二)
前端代码规范 及 最佳实践
w3school教程整理
大数据/数据挖掘/推荐系统/机器学习相关资源
程序员编程艺术
每个程序员都应该了解的内存知识(译)【第一部分】
取悦的工序:如何理解游戏 (豆瓣阅读,免费书籍)
OpenWrt智能、自动、透明翻墙路由器教程
awk程序设计语言
C++ 并发编程指南 (@傅海平ICT)
Linux C编程一站式学习 (宋劲杉, 北京亚嵌教育研究中心)
CGDB中文手册
100个gdb小技巧
100个gcc小技巧
ZMQ 指南
How to Think Like a Computer Scientist (中英文版)
跟我一起写Makefile(PDF)
GNU make中文手册
GNU make 指南
Google C++ 风格指南
C/C++ Primer (by @andycai)
简单易懂的C魔法
Cmake 实践 (PDF版)
C++ FAQ LITE(中文版)
C++ Primer 5th Answers
学习CSS布局
通用 CSS 笔记、建议与指导
CSS参考手册
Emmet 文档
前端代码规范 (腾讯alloyteam团队)
Dart 语言导览
Fortran77和90/95编程入门
实时 Java 系列
Apache Shiro 用户指南
使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序
第 1 部分: Web Services 服务端应用程序
第 2 部分: Web 服务客户端应用程序
JavaServer Faces 1.2 入门
第 1 部分: 构建基本应用程序
第 2 部分: JSF 生命周期、转换、检验和阶段监听器
用 Eclipse Europa 进行 Web 开发
第 1 部分: Eclipse Java EE
第 2 部分: PHP 开发工具
第 3 部分: Ruby Development Toolkit 和 RadRails
使用 JavaServer Faces 构建 Apache Geronimo 应用程序
第 1 部分: 使用 Eclipse 和 Apache MyFaces Core 构建基本的应用程序
第 2 部分: 在 JavaServer Faces 中使用 Tomahawk
第 3 部分: 使用 ajax4jsf 添加 Ajax 功能
第 4 部分: 使用 Apache Trinidad 组件扩展 JSF
第 5 部分: 将 JSF 应用程序与 Spring 集成
Apache Geronimo 和 Spring 框架
第 1 部分: 开发方法学
第 2 部分: 构建第一个应用程序
第 3 部分: 集成 DAO 与 ORM
第 4 部分: 混合使用 Spring AOP 和 Spring Web Flow
第 5 部分: Spring MVC
第 6 部分: Spring MVC:使用 Web 视图技术
终极 mashup —— Web 服务和语义 Web
第 1 部分: 使用与组合 Web 服务
第 2 部分: 管理 Mashup 数据缓存
第 3 部分: 理解 RDF 和 RDFs
第 4 部分: 创建本体
第 5 部分: 切换 Web 服务
Jersey 2.x 用户指南
MyBatis中文文档
Google JavaScript 代码风格指南
Airbnb JavaScript 规范
JavaScript 标准参考教程(alpha)
Javascript编程指南 (源码)
javascript 的 12 个怪癖
JavaScript 秘密花园
JavaScript核心概念及实践 (PDF) (此书已由人民邮电出版社出版发行,但作者依然免费提供PDF版本,希望开发者们去购买,支持作者)
《JavaScript 模式》翻译,此书中文版有售,但是纸质书翻译的还没有这个版本翻译的好
命名函数表达式探秘 (注:原文由为之漫笔翻译,原始地址无法打开,所以此处地址为我博客上的备份)
学用 JavaScript 设计模式 (开源中国)
深入理解JavaScript系列
ECMAScript 6 入门 (作者:阮一峰)
jQuery
jQuery 解构
简单易懂的JQuery魔法
How to write jQuery plugin
Node.js
Node入门
七天学会NodeJS
Nodejs Wiki Book (繁体中文)
express.js 中文文档
koa 中文文档
使用 Express + MongoDB 搭建多人博客
Express框架
nodejs文档
Node.js 包教不包会
Learn You The Node.js For Much Win! (中文版)
Node debug 三法三例
underscore.js
Underscore.js中文文档
backbone.js
backbone.js入门教程 (PDF)
Backbone.js入门教程第二版
Developing Backbone.js Applications(中文版)
AngularJS
AngularJS最佳实践和风格指南
AngularJS中译本
AngularJS入门教程
构建自己的AngularJS
在Windows环境下用Yeoman构建AngularJS项目
zepto 简明中文手册
Sea.js
Hello Sea.js
CoffeeScript
CoffeeScript Cookbook
The Little Book on CoffeeScript中文版
ExtJS
Ext4.1.0 中文文档
Chrome扩展及应用开发
JavaScript入门教程
PHP调试技术手册(PDF)
XDebug 2中文手册(译) (CHM)
PHP之道
PHP 最佳实践
PHP安全最佳实践
深入理解PHP内核
PHP扩展开发及内核应用
CodeIgniter 用户指南
Laravel4 中文文档
Laravel 入门
Symfony2中文文档 (未译完)
Phalcon中文文档(翻译进行中)
YiiBook几本Yii框架的在线教程
简单易懂的PHP魔法
swoole文档及入门教程
iOS开发60分钟入门
iOS7人机界面指南
Google Objective-C Style Guide 中文版
iPhone 6 屏幕揭秘
Apple Watch开发初探
马上着手开发 iOS 应用程序
网易斯坦福大学公开课:iOS 7应用开发字幕文件
Android Design(中文版)
Google Android官方培训课程中文版
Android学习之路
小白的Python教程
简明Python教程
零基础学Python
Python 2.7 官方教程中文版
Python 3.3 官方教程中文版
深入 Python 3
PEP8 Python代码风格规范
Google Python 风格指南 中文版
Python入门教程 (PDF)
Python的神奇方法指南
笨办法学 Python (PDF版下载)
Django 文档中文版
Django 最佳实践
The Django Book 中文版
web.py 0.3 新手指南
Web.py Cookbook 简体中文版
Dive Into Python 中文版
Bottle 文档中文版 (需翻墙)
Flask 文档中文版
Jinja2 文档中文版
Werkzeug 文档中文版
Flask之旅
Introction to Tornado 中文翻译
Python自然语言处理中文版 (感谢陈涛同学的翻译,也谢谢 @shwley 联系了作者)
Python 绘图库 matplotlib 官方指南中文翻译
Scrapy 0.25 文档
ThinkPython
Ruby 风格指南
Rails 风格指南
笨方法学 Ruby
Ruby on Rails 指南
Ruby on Rails 实战圣经
Ruby on Rails Tutorial 原书第 2 版 (本书网页版免费提供,电子版以 PDF、EPub 和 Mobi 格式提供购买,仅售 9.9 美元)
编写Ruby的C拓展
Ruby 源码解读
Shell脚本编程30分钟入门
Go编程基础
Go入门指南
学习Go语言 (PDF)
Go Web 编程 (此书已经出版,希望开发者们去购买,支持作者的创作)
Go实战开发 (当我收录此项目时,作者已经写完第三章,如果读完前面章节觉得有帮助,可以给作者捐赠,以鼓励作者的继续创作)
Network programming with Go 中文翻译版本
实战 Groovy 系列
一份其实很短的 LaTeX 入门文档
一份不太简短的 LATEX 2ε 介绍 (PDF版)
ANSI Common Lisp 中文翻译版
Lua编程入门
Real World Haskell 中文版
R语言忍者秘笈
Scala课堂 (Twitter的Scala中文教程)
Effective Scala(Twitter的Scala最佳实践的中文翻译)
Scala指南
The Swift Programming Language 中文版
Modern Perl 中文版
Perl 程序员应该知道的事
笨办法学Prolog
Vim中文文档
笨方法学Vimscript 中译本
Vim中文文档
编译原理(紫龙书)中文第2版习题答案
把《编程珠玑》读薄
Effective C++读书笔记
Golang 学习笔记、Python 学习笔记、C 学习笔记 (PDF)
Jsoup 学习笔记
学习笔记: Vim、Python、memcached
图灵开放书翻译计划–C++、Python、Java等
蒂姆·奥莱利随笔 (由译言网翻译,电子版免费)
Octave 入门 (PDF版)
SICP 解题集
精彩博客集合
正则表达式简明参考
⑸ 对比jQuery和AngularJS的不同思维模式
jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看
本文来自StackOverFlow上How do I “think in AngularJS” if I have a jQuery background?一题中得票最高的回答。该回答得票超过3000次,回答者Josh David Miller是活跃于开源社区的开发者,也是Emergenesis公司的联合创始人。该答案最初由数云架构师韩铮翻译并发布在自己的博客上,在征得Josh同意后由韩铮本人推荐给 InfoQ进行分享,并在经过InfoQ社区编辑崔康审校后发布在此。
1. 不要先设计页面,然后再使用DOM操作来改变它的展现
在jQuery中,你通常会设计一个页面,然后再给它动态效果。这是因为jQuery的设计就是为了扩充DOM并在这个简单的前提下疯狂的生长的。
但是在AngularJS里,必须从头开始就在头脑中思考架构。必须从你想要完成的功能开始,然后设计应用程序,最后来设计视图,而非“我有这么一个DOM片段,我想让他可以实现XXX效果”。
2. 不要用AngularJS来加强jQuery
类似的,不要以这样的思维开始:用jQuery来做X,Y和Z,然后只需要把AngularJS的models和controllers加在这上面。这在刚开始的时候显得非常诱人,这也是为什么我总是建议AngularJS的新手完全不使用jQuery,至少不要在习惯使用“Angular Way”开发之前这么做。
我在邮件列表里看到很多开发者使用150或200行代码的jQuery插件创造出这些复杂的解决方案,然后使用一堆callback函数以及$apply把它粘合到AngularJS里,看起来复杂难懂;但是他们最终还是把它搞定了!问题是在大多数情况下这些jQuery插件可以使用很少的AngularJS代码重写,而且所有的一切都很简单直接容易理解。
这里的底线是:当你选择解决方案时,首先“think in AngularJS”;如果想不出一个解决方案,去社区求助;如果还是没有简单的解决方案,再考虑使用jQuery。但是不要让jQuery成为你的拐杖,导致你永远无法真正掌握AngularJS。
3. 总是以架构的角度思考
首先要知道Single-page应用是应用,不是网页。所以我们除了像一个客户端开发者般思考外,还需要像一个服务器端开发者一样思考。我们必须考虑如何把我们的应用分割成独立的,可扩展且可测试的组件。
那么如何做到呢?如何“think in AngularJS”?这里有一些基本原则,对比jQuery。
视图是“Official Record”
在jQuery里,我们编程改变视图。我们会将一个下拉菜单定义为一个ul :
<ul class="main-menu">
<li class="active"> <a href="#/home">Home</a> </li>
<li> <a href="#/menu1">Menu 1</a>
<ul>
<li><a href="#/sm1">Submenu 1</a></li>
<li><a href="#/sm2">Submenu 2</a></li>
<li><a href="#/sm3">Submenu 3</a></li>
</ul>
</li>
<li> <a href="#/home">Menu 2</a> </li>
</ul>
在jQuery里,我们会在应用逻辑里这样启用这个下拉菜单:
$('.main-menu').dropdownMenu();
当我们只关注视图,这里不会立即明显的体现出任何(业务)功能。对于小型应用,这没什么不妥。但是在规模较大的应用中,事情就会变得难以理解且难以维护。
而在AngularJS里,视图是基于视图的功能。ul声明就会像这样:
<ul class="main-menu" dropdown-menu> ... </ul>
这两种方式做了同样的东西,但是在AngularJS的版本里任何人看到这个模版都可以知道将会发生什么事。不论何时一个新成员加入开发团队,他看到这个就会知道有一个叫做dropdownMenu的directive作用在这个标签上;他不需要靠直觉去猜测代码的功能或者去看任何代码。视图本身告诉我们会发生什么事。清晰多了。
首次接触AngularJS的开发者通常会问这样一个问题:如何找到所有的某类元素然后给它们加上一个directive。但当我们告诉他:别这么做时,他总会显得非常的惊愕。而不这么做的原因是这是一种半jQuery半AngularJS的方式,这么做不好。这里的问题在于开发者尝试在 AngularJS的环境里“do jQuery”。这么做总会有一些问题。视图是official record(译者注:作者可能想表达视图是一等公民)。在一个directive外,绝不要改变DOM。所有的directive都应用在试图上,意图非常清晰。
记住:不要设计,然后写标签。你需要架构,然后设计。
数据绑定
这是到现在为止最酷的AngularJS特性。这个特性使得前面提到的很多DOM操作都显得不再需要。AngularJS会自动更新视图,所以你自己不用这么做!在jQuery里,我们响应事件然后更新内容,就像这样:
$.ajax({
url: '/myEndpoint.json',
success: function ( data, status ) {
$('ul#log').append('<li>Data Received!</li>');
}
});
对应的视图:
<ul class="messages" id="log"> </ul>
除了要考虑多个方面,我们也会遇到前面视图中的问题。但是更重要的是,需要手动引用并更新一个DOM节点。如果我们想要删除一个log条目,也需要针对DOM编码。那么如何脱离DOM来测试这个逻辑?如果想要改变展现形式怎么办?
这有一点凌乱琐碎。但是在AngularJS里,可以这样来实现:
$http('/myEndpoint.json').then(function (response) {
$scope.log.push({
msg: 'Data Received!'
});
});
视图看起来是这个样子的:
<ul class="messages"> <li ng-repeat="entry in log"></li> </ul>
但是其实还可以这样来做:
<div class="messages"> <div class="alert" ng-repeat="entry in log"> </div> </div>
现在如果我们想使用Bootstrap的alert boxes,而不是一个无序列表,根本不需要改变任何的controller代码!更重要的是,不论log在何处或如何被更新,视图便会随之更新。自动的。巧妙!
尽管我没有在这里展示,数据绑定其实是双向的。所以这些log信息在视图里也可以是可编辑的。只需要这么做:
<input ng-model="entry.msg" />
。简单快乐。
清晰的模型(Model)层
在jQuery里,DOM在一定程度上扮演了模型的角色。但在AngularJS中,我们有一个独立的模型层可以灵活的管理。完全与视图独立。这有助于上述的数据绑定,维护了关注点的分离(独立的考虑视图和模型),并且引入了更好的可测性。后面还会提到这点。
关注点分离
上面所有的内容都与这个愿景相关:保持你的关注点分离。视图负责展现将要发生的事情;模型表现数据;有一个service层来实现可复用的任务;在 directive里面进行DOM操作和扩展;使用controller来把上面的东西粘合起来。这在其他的答案里也有叙述,我在这里只增加关于可测试性的内容,在后面的一个段落里详述。
依赖注入
依赖注入帮我们实现了关注点分离。如果你来自一个服务器语言(java或php),可能对这个概念已经非常熟悉,但是如果你是一个来自jQuery的客户端开发者,这个概念可能看起来有点傻而多余。但其实不是的。。。
大体来讲,DI意味着可以非常自由的声明组件,然后在另一个组件里,只需要请求一个该组件的实例,就可以得到它。不需要知道(关心)加载顺序,或者文件位置,或类似的事情。这种强大可能不会立刻显现,但是我只提供一个(常见。。)的例子:测试。
就说在你的应用里,我们需要一个服务通过REST API来实现服务器端存储,并且根据不同的应用状态,也有可能使用(客户端)本地存储。当我们运行controller的测试时,不希望必须和服务器交互 —— 毕竟是在测试controller逻辑。我们可以只添加一个与本来使用的service同名的mock service,injector会确保controller自动得到假的那个service —— controller不会也不需要知道有什么不同。
说起测试……
4. 总是 —— 测试驱动开发
这其实是关于架构的第3节。但是它太重要了,所以我把它单独拿出来作为一个顶级段落。
在所有那些你见过,用过或写过的jQuery插件中,有多少是有测试集的?不多,因为jQuery经不起测试的考验。但是AngularJS可以。
在jQuery中,唯一的测试方式通常是独立地创建附带sample/demo页面的组件,然后我们的测试在这个页面上做DOM操作。所以我们必须独立的开发一个组件,然后集成到应用里。多不方便!在使用jQuery开发时,太多的时间,我们挑选迭代而非测试驱动开发。谁又能责怪我们呢?
但是因为有了关注点分离,我们可以在AngularJS中迭代地做测试驱动开发!例如,想要一个超级简单的directive来展现我们的当前路径。可以在视图里声明:
<a href="/hello" when-active>Hello</a>
OK,现在可以写一个测试:
it('should add "active" when the route changes', inject(function () {
var elm = $compile('<a href="/hello" when-active>Hello</a>')($scope);
$location.path('/not-matching');
expect(elm.hasClass('active')).toBeFalsey();
$location.path('/hello');
expect(elm.hasClass('active')).toBeTruthy();
}));
执行这个测试来确认它是失败的。然后我们可以开始写这个directive了:
.directive('whenActive', function ($location) {
return {
scope: true,
link: function (scope, element, attrs) {
scope.$on('$routeChangeSuccess', function () {
if ($location.path() == element.attr('href')) {
element.addClass('active');
} else {
element.removeClass('active');
}
});
}
};
});
测试现在通过了,然后我们的menu按照请求的方式执行。开发过程既是迭代的也是测试驱动的。太酷了。
5. 概念上,Directives并不是打包的jQuery
你经常会听到“只在directive里做DOM操作”。这是必需的。请给它应有的尊重!
但让我们再深入一点……
一些directive仅仅装饰了视图中已经存在的东西(想想ngClass)并且因此有时候仅仅直接做完DOM操作然后就完事了。但是如果一个 directive像一个“widget”并且有一个模版,那么它也要做到关注点分离。也就是说,模版本身也应该很大程度上与其link和 controller实现保持独立。
AngularJS拥有一整套工具使这个过程非常简单;有了ngClass我们可以动态地更新class;ngBind使得我们可以做双向数据绑定。ngShow和ngHide可编程地展示和隐藏一个元素;以及更多地 —— 包括那些我们自己写的。换句话说,我们可以做到任何DOM操作能实现的特性。DOM操作越少,directive就越容易测试,也越容易给它们添加样式,在未来也越容易拥抱变化,并且更加的可复用和发布。
我见过很多AngularJS新手,把一堆jQuery扔到directive里。换句话说,他们认为“因为不能在controller里做DOM操作,就把那些代码弄到directive里好了”。虽然这么做确实好一些,但是依然是错误的。
回想一下我们在第3节里写的那个logger。即使要把它放在一个directive里,我们依然希望用“Angular Way”来做。它依然没有任何DOM操作!有很多时候DOM操作是必要的,但其实比你想的要少得多!在应用里的任何地方做DOM操作之前,问问你自己是不是真的需要这么做。有可能有更好的方式。
这里有一个示例,展示出了我见过最多的一种模式。我们想做一个可以toggle的按钮。(注意:这个例子有一点牵强、啰嗦,这是为了表达出使用同样方式处理问题的更复杂的情况。)
.directive('myDirective', function () {
return {
template: '<a class="btn">Toggle me!</a>',
link: function (scope, element, attrs) {
var on = false;
$(element).click(function () {
if (on) {
$(element).removeClass('active');
} else {
$(element).addClass('active');
}
on = !on;
});
}
};
});
这里有一些错误的地方。首先,jQeury根本没必要出现。我们在这里做的事情都根本用不着jQuery!其次,即使已经将jQuery用在了页面上,也没有理由用在这里。第三,即使假设这个directive依赖jQuery来工作,jqLite(angular.element)在加载后总会使用jQuery!所以我们没必要使用$ —— 用angular.element就够了。第四,和第三条紧密关联,jqLite元素不需要被$封装 —— 传到link里的元素本来就会是一个jQuery元素!第五,我们在前面段落中说过,为什么要把模版的东西混到逻辑里?
这个directive可以(即使是更复杂的情况下!)写得更简单:
.directive('myDirective', function () {
return {
scope: true,
template: '<a class="btn" ng-class="{active: on}" ng-click="toggle()">Toggle me!</a>',
link: function (scope, element, attrs) {
scope.on = false;
scope.toggle = function () {
scope.on = !$scope.on;
};
}
};
});
再一次地,模版就在模版里,当有样式需求时,你(或你的用户)可以轻松的换掉它,不用去碰逻辑。重用性 —— boom!
当然还有其他的好处,像测试 —— 很简单!不论模版中有什么,directive的内部API从来不会被碰到,所以重构也很容易。可以不碰directive就做到任意改变模版。不论你怎么改,测试总是通过的。
所以如果directive不仅仅是一组类似jQuery的函数,那他们是什么?Directive实际是HTML的扩展。如果HTML没有做你需要它做的事情,你就写一个directive来实现,然后就像使用HTML一样使用它。
换句话说,如果AngularJS库没有做的一些事情,想想开发团队会如何完成它来配合ngClick,ngClass等。
总结
不要用jQuery。连include也不要。它会让你停滞不前。如果遇到一个你认为已经知道如何使用jQuery来解决的问题,在使用$之前,试试想想如何在AngularJS的限制下解决它。如果你不知道,问!20次中的19次,最好的方式不需要jQuery。如果尝试使用jQuery会增加你的工作量。
这是我目前最长的Stack Overflow回答。事实上,这个答案太长了,我都要填一个Captcha了。但是就如我常说的:能说多时候说的少其实就是懒。
希望这个答案对你有用。
⑹ 我需要 AngularJS权威教程.ng-book,求书籍求分享百度网盘!谢好人!
我这有资源 可以看下 AngularJS权威教程.ng-bookhttps://pan..com/s/1S7P_pU0CUoybH7fvF5uhuw?pwd=1234
本书是资深全栈工程师的代表性著作,由拥有丰富经验的国内AngularJS技术专家执笔翻译,通俗易懂、全面深入,是学习AngularJS不可错过的经典之作。无论是出于工作需要,还是好奇心的驱使,只要你想彻底理解AngularJS,本书都会让你感到满意。