Angular之watch的特殊使用

使用AngularJs开发项目的同学应该对watch很熟悉了,在项目中难免会用到watch来监听scope中值的变化来执行相应的操作.

  • $watch的常规使用:

    scope.name = 'aa';
    scope.$watch('aa', function(newVal, oldVal){
       //执行相应操作
    });
    
  • 特殊使用,因为watch可以用来监听一个函数,所以当我们需要每次执行$digest()都执行一个操作(即scope发生变化的时候),这是我们就可以把第一个参数设置成一个我们需要每次都执行的函数。

    scope.$watch(function(){
       //每次都需要执行的操作
    });
    

Hexo - blog framework - 程序员写博客利器

  • 问题
    • 你曾经为写博客而烦恼吗?
    • 你曾经为选择哪个博客提供商而犹豫不决吗?
    • 你曾经为搭建自运营博客网站的繁琐而郁闷吗?(Wordpress)
    • 你曾经为Github + Jekyll的繁琐的安装环境而精力憔悴吗?
  • 解决方案
    • 有了Hexo你的生活不再烦恼,妈妈再也不用担心我的学习!
      • Hexo - A fast, simple & powerful blog framework
      • 详情请咨询Hexo官网(文档很详细,就不累赘具体介绍了):
  • Hexo的优点:
    • Hexo 访问速度快
      • Hexo是基于Nodejs的静态博客工具。所谓静态博客区别于Wordress之类的博客系统主要是并不是由动态语言在服务端生成,而是使用者在使用完博客后生成全站静态文件。
    • 环境安装方便
      • Hexo 是nodejs的一个plugin,只需要装node环境
      • npm install -g hexo (一键搞定)
    • 书写方便
      • 使用markdown书写。
    • 编译速度快
      • Hexo的编译速度比Jekyll快好多,特别是文章多的情况下
    • 插件多
      • 可以安装很多功能强大的插件,比如多说评论等等
    • 容易保存原始资料
      • Hexo的原始资料可以纳入版本管理之中,随时保存原始资料。不用想wordpress那个需要自己去备份数据库
    • 一键部署到github
      • Hexo 提供 command: hexo deploy 来部署网站

理解HTTP Header

  • HTTP协议是怎样传输的?
    • HTTP采用请求/响应模型,浏览器端发送请求,服务器给与响应。就整个网络资源传输而言,包括message-header和message-body两部分。
    • http 请求的整个过程
  • http header
    • http header内容的组织形式,大体分为Request和Response两部分。
  • Request
    • 当你在流览器位址栏里键入一个url,你的流览器会将类似如下的http请求
      GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1 (Request line)
      Host: net.tutsplus.com
      User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Accept-Language: en-us,en;q=0.5
      Accept-Encoding: gzip,deflate
      Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
      Keep-Alive: 300
      Connection: keep-alive
      Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
      Pragma: no-cache
      Cache-Control: no-cache
      
      • 第一行被称为“Request Line” 它描述的是这个请求的基本资讯,剩下的就是HTTP headers了。
  • Response
    • 请求完成之后,你的流览器可能会收到如下的HTTP回应:
      HTTP/1.x 200 OK (state line)
      Transfer-Encoding: chunked
      Date: Sat, 28 Nov 2009 04:36:25 GMT
      Server: LiteSpeed
      Connection: close
      X-Powered-By: W3 Total Cache/0.8
      Pragma: public
      Expires: Sat, 28 Nov 2009 05:36:25 GMT
      Etag: "pub1259380237;gz"
      Cache-Control: max-age=3600, public
      Content-Type: text/html; charset=UTF-8
      Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
      X-Pingback: http://net.tutsplus.com/xmlrpc.php
      Content-Encoding: gzip
      Vary: Accept-Encoding, Cookie, User-Agent
      <!-- ... rest of the html ... -->
      
      • 第一行被称为“Status Line”,它之后就是http headers,空行完了就开始输出内容了(在这个案例中是一些html输出)。
  • HTTP Request结构
    • 被称作“first line”的第一行包含三个部分:
      • “method” 表明这是何种类型的请求. 最常见的请求类型有GET,POST和HEAD.
      • “path” 体现的是主机之后的路径. 例如,当你请求“http://net.tutsplus.com/tutorials/other”时, path 就会是”/tutorials/other”.
      • “protocol” 包含有“HTTP” 和版本号.
    • 剩下的部分每行都是一个”Name:Value”对(即: MIME信息)。它们包含了各式各样关于请求和你流览器的资讯。
  • HTTP Response结构
    • 第一个有价值的资讯就是协定。目前伺服器都会使用HTTP/1.x 或者HTTP/1.1。
    • 接下来一个简短的资讯代表状态。代码200意味着我们的请求已经发送成功了,伺服器将会返回给我们所请求的文档,在Header资讯之后。
      • HTTP 状态码
        • 200 用来表示请求成功.
        • 300 来表示重定向.
        • 400 用来表示请求出现问题.
        • 500 用来表示伺服器出现问题.
    • 同样,这些Header资讯也是可选的。

git学习总结

基本命令

  • 安装git

    • 下载安装git
    • 配置username 和 emai
      • git config –global user.name “Your Name”
      • git config –global user.email “email@example.com”
      • 注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
  • 创建和初始化版本库

    • mkdir learngit
    • git init
  • 添加文件到仓库

    • git add readme.txt [添加到暂存区]
  • 提交文件到仓库

    • git commit -m “wrote a readme file”
  • 查看仓库当前状态

    • git status
  • 查看本地文件修改内容

    • git diff readme.txt [比对工作区和缓存去的不同]
    • git diff HEAD – readme.txt [查看工作区和版本库里面最新版本的区别]
  • 查看提交日志

    • git log
    • git log –pretty=oneline [精简日志信息]
  • 回退到版本

    • git reset –hard HEAD^ [回退到上一版本]
    • git reset –hard HEAD^^ [回退到上二版本]
    • git reset –hard HEAD~10 [回退到上10个版本]
  • 回到未来的某个版本

    • git reset –hard 3628164 [只要知道未来的commit id就行]
  • 查看历史命令

    • git reflog [可以用来找回未来的某个commit id, 用来回退]、
  • 撤销工作去的修改[或恢复到最新版本]

    • git checkout – readme.txt
  • 删除文件

    • git rm test.txt [从版本库中删除]
    • git commit test.txt

远程仓库(已githup为例)

  • 创建SSH Key

    • ssh-keygen -t rsa -C “youremail@example.com”

      • 在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。
    • 在Github上添加SSH Key

      • 登陆GitHub,打开“Account settings”,“SSH Keys”页面
      • 然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
  • 添加远程仓库

    • git remote add origin git@github.com:zq210wl/learngit.git [添加远程仓库origin]
  • 把本地库的内容推送到远程库上

    • git push -u origin master [第一次提交分支时]
      • 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    • git push origin master [把当前本地库内容推动到远程origin库下的master分支]
    • git push [推送当前所在分支到远程库,如果当前是在dev分支,那么会提交到dev上]
  • 克隆远程分支到本地

    • git clone git@github.com:zq210wl/learngit.git destinationDir [目标文件夹可选]
      • 默认从远程clone的仓库,在本地只有主分支,如果要用其他分支就必须自己创建,然后建立对应联系
      • 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
  • 创建分支

    • git branch dev [在当前分支上创建dev分支]
  • 切换分支

    • git checkout dev
  • 创建并切换到分支

    • git checkout -b dev [加上-b参数表示创建并切换]
  • 查看分支

    • git branch
  • 查看远程仓库信息

    • git remote
    • git remote -v [显示更详细的信息]
  • 合并分支

    • git merge dev [合并某分支到当前分支,如果要合并到master分支,就必须切换到master分支下] [Fast forward模式]
    • git merge –no-ff -m “merge with no-ff” dev [–no-ff]
      • 合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
  • 删除分支

    • git branch -d dev
    • git branch -D dev [强行删除还没有合并的分支]
    • git push origin :dev [删除远程dev分支]
  • 解决冲突

    • Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
    • 需要手动解决冲突
  • 查看分支合并图

    • git log –graph –pretty=oneline –abbrev-commit
    • git log –graph
  • 设置本地分支和远程分支的联系

    • git branch –set-upstream dev origin/dev
      • 如果远程已经有一个dev分支,而你又在本地创建了自己的dev分支,如果要从远程dev分支上更新文件就需要建立联系
  • 从远程抓取分支
    • git pull
      • 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建
  • 注意:

    • 一个仓库只能关联一个远程库,所以get remote 只会有一个库
    • 一个库可以有多个分支
    • 本地分支和远程分支的区别?

      • 在本地创建的分支就是本地分支; git branch
      • 如果把本地创建的分支push到远程仓库,那么在远程仓库上就存在了这个分支,也就叫做远程分支; git remote
      • 开发两种有一些分支是不需要提交到远程仓库,只需要在本地合并到主分支,然后再push到远程主分支
    • 什么时候用分支?

      • 一般是在开发一个新feature时,先创建一个分支, 在这个分支完成此feature然后再merge到master分支,合并完后,如果此feature已经完成,可以删除此分支,如果有另一个feature的话,可以再重新常见分支,以此类推
  • 分支策略:

高级使用

  • 创建标签
  • 忽略某些文件
    • 在库的根目录下创建 .gitignore 文件,并提交次文件
    • 格式
      • # 注释符号
      • 每行写一个要忽略的文件或目录
      • 示例:
        • build.xml
        • *.class
        • *.log
        • bin/
  • 配置别名
  • 搭建Git服务器

参考网址