https://my.oschina.net/u/1992917/blog/406421
https://checkcheckzz.gitbooks.io/angularjs-learning-notes/content/chapter18/18-3.html