精通AngularJS:新手到专家

需积分: 3 2 下载量 14 浏览量 更新于2024-07-18 收藏 3.52MB PDF 举报
"AngularJS Novice to Ninja 是一本引导初学者深入AngularJS世界的书籍,AngularJS是由Google开发和维护的JavaScript框架,它将Model-View-Controller(MVC)模式引入JavaScript应用,为快速构建复杂且功能强大的应用程序提供了高质量的基础。这本书由Sandeep Panda撰写,涵盖了一系列关于AngularJS的知识点,包括模块、控制器、数据绑定、作用域、事件、多视图、路由、服务、工厂、提供者、单页博客应用开发、表单处理、与REST API交互、指令、依赖注入、过滤器、动画、部署、国际化、身份验证和授权等。" 书中详细介绍了以下几个关键概念和技术: 1. Falling In Love With AngularJS:介绍AngularJS的基本理念和优势,帮助读者建立对框架的初步理解。 2. Modules, Controllers & Data Binding:讲解AngularJS中的模块系统,控制器如何用于管理应用状态,以及数据绑定如何实现视图和模型之间的同步。 3. AngularJS Scope & Events:阐述作用域的概念,它是数据在AngularJS中的主要通信机制,并讨论了作用域事件的使用。 4. Multiple Views and Routing:介绍如何使用AngularJS创建多个视图并实现页面间的导航,以及uirouter等路由管理工具的应用。 5. Services, Factories, and Providers:深入探讨服务、工厂和提供者的设计模式,它们是AngularJS中创建可重用组件的关键。 6. Developing Single Page Blogger:通过构建一个单页博客应用的实例,实战练习AngularJS的各个核心特性。 7. Understanding AngularJS Forms:讲解如何处理表单输入,验证用户数据,以及表单状态的管理。 8. Interacting with REST APIs:介绍如何利用AngularJS与RESTful服务进行交互,获取和发送数据。 9. Using REST APIs in Single Page Blogger:在单页博客应用中集成REST API,展示实际的API调用和响应处理。 10. AngularJS Directives:讲解自定义指令的创建和使用,扩展AngularJS的功能。 11. Adding a Comment System to Single Page Blogger:添加评论系统到单页博客应用,涉及DOM操作和双向数据绑定。 12. Dependency Injection in AngularJS:详述依赖注入机制,简化代码的编写和测试。 13. AngularJS Filters:介绍过滤器,用于数据转换和格式化,如日期、货币等。 14. AngularJS Animation:讨论如何在AngularJS中添加动画效果,提升用户体验。 15. Deployment and Internationalization:涵盖应用的部署策略和国际化支持。 16. Authentication and Authorization in AngularJS:讲解如何在AngularJS应用中实现用户身份验证和权限控制。 这本书全面地涵盖了AngularJS的核心概念和技术,是初学者和进阶者深入了解和掌握AngularJS的宝贵资源。通过实际项目案例和逐步指导,读者能够从新手成长为精通AngularJS的开发者。
2015-06-15 上传
非常不错的书 Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Who Should Read This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Conventions Used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii Code Samples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii Tips, Notes, and Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Supplementary Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Want to Take Your Learning Further? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xx Chapter 1 Falling In Love With AngularJS . . . . . 1 The Power Features of AngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Download and Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Installing via CDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Hosting on Your Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Required Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 AngularJS Batarang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 The Angular Seed Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 The Anatomy of an AngularJS app . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 What is MVW? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Structuring Our Code With MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Unit and End-to-End Testing in AngularJS . . . . . . . . . . . . . . . . . . . . . . . . 17 Where to Put Your Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 How to Run Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 When Not To Use AngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Chapter 2 Modules, Controllers & Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Creating Our First Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Modular Programming Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 The Role of a Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Attaching Properties and Functions to Scope . . . . . . . . . . . . . . . . . . 30 Adding Logic to the Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Adding Instance Functions and Properties to Controllers . . . . . . . . 35 Dependency Injection in Controllers With Minification . . . . . . . . . 37 Overview of Two-Way Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 What Is Data Binding? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Two-Way Binding in AngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Doing Something Cool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Introducing Our Demo Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 The Single Page Blogger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Getting Ready . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Chapter 3 AngularJS Scope & Events . . . . . . . . . . . . 45 Scope Demystified . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Writing Access with Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Objects Can Extend Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Prototypal Inheritance in AngularJS Scopes . . . . . . . . . . . . . . . . . . . . . . . 49 Advanced Scope Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 The Watchers in AngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 The $watchCollection() Function . . . . . . . . . . . . . . . . . . . . . . . 56 The $apply() Function and the $digest Loop . . . . . . . . . . . . . . 57 $apply and $digest in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 x Broadcasting & Emitting Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 $scope.$emit(name,args) For Emitting Events . . . . . . . . . . . . 64 $scope.$broadcast(name,args) For Broadcasting Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 $scope.$on(name,handlerFunction) For Registering Listeners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Events in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 The $destroy event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Chapter 4 Multiple Views and Routing . . . . . . . . . 71 Creating Multiple Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Using $routeParams in the Controller . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Using ng-template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 The resolve Property in the Route Config Object . . . . . . . . . . . . . . . . . 83 Exploring the $location Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 The API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Events in Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 $location related events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 $route related events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 The ng-include Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Introducing the Angular UI Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Getting Started With UI Routter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Defining States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Chapter 5 AngularJS Services, Factories, and Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 xi Eager Loading of a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Using Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Chapter 6 Developing Single Page Blogger . . . 113 Developing Our App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Defining Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Creating Our Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Creating the Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Creating the Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 App Entry Point (index.html) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 How About Some Unit Tests? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Unit Testing postService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Unit Testing Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Writing an End-to-End (e2e) Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Chapter 7 Understanding AngularJS Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 AngularJS Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 <input> and <textarea> controls . . . . . . . . . . . . . . . . . . . . . . . 130 <select> control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Radio Button Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Checkbox Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 AngularJS Form Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 xii Applying Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Updating Models With a Twist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Forms in Action : Single Page Blogger v1.1 . . . . . . . . . . . . . . . . . . . . . . . 143 Creating the admin Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Defining States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Creating Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Admin Panel Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Template For Adding a New Post . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Chapter 8 Interacting with REST APIs . . . . . . . . . 151 A Primer on Promises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 The Promise API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Example Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Promise Chaining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Creating a Promise that Always Rejects . . . . . . . . . . . . . . . . . . . . . 159 Understanding the $http Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 The config Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 A Weather Search Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Setting Request Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Request and Response Transformers . . . . . . . . . . . . . . . . . . . . . . . . 166 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Interceptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Understanding AngularJS $resource . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 How Does $resource Work? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 xiii Chapter 9 Using REST APIs in Single Page Blogger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Applying $resource to Our App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Defining Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Defining Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Including angular-resource.js and Adding the ngResource Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Unit Testing Our Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Chapter 10 AngularJS Directives . . . . . . . . . . . . . . . . . . 193 What Are Directives, Really? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Directives From the jQuery Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Creating Custom Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 The Link Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 The Compile Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Compilation of Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Changing a Directive’s Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Binding Between Parent Scope and Isolated Scope Models . . . . . . . . . 207 Using @ For One-Way Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Using = For Two-Way Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Using & to Execute Functions in the Parent Scope . . . . . . . . . . . . 209 Parent Scope vs. Child Scope vs. Isolated Scope . . . . . . . . . . . . . . . . . . . 212 Transclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Differences Between transclude:'element' and transclude:true . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 The Controller Function and Require . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Cleaning Up Your Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 IE 8 Precautions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 xiv Chapter 11 Adding a Comment System to Single Page Blogger . . . . . . . . . . . . . . . . . . . . 219 Unit Testing Our Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Chapter 12 Dependency Injection In AngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 A Brief Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 The $provide Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 The $injector Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Dynamically Injecting a Dependency . . . . . . . . . . . . . . . . . . . . . . . . 230 Registration of Controllers, Filters, and Directives . . . . . . . . . . . . . 230 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Chapter 13 AngularJS Filters . . . . . . . . . . . . . . . . . . . . . . . 233 Filter Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Fun with Custom Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Chaining Multiple Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Using Filters in Controllers, Services, and Directives . . . . . . . . . . . 236 Meet a Filter Called filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Meet the orderBy Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Meet the limitTo Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Using the $filter Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Using Filters in Single Page Blogger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Permalink Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Wordcount Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 xv Chapter 14 AngularJS Animation . . . . . . . . . . . . . . . . . 245 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Animation with CSS3 Transitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Going Further . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Animation Using Keyframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Animation Using jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Animation Using ngClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Animation with Custom Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Adding Simple Animation to Single Page Blogger . . . . . . . . . . . . . . . . . 257 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Chapter 15 Deployment and Internationalization . . . . . . . . . . . . . . . . . . . 259 Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Chapter 16 Authentication and Authorization in AngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Adding Login Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Where To Go Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Things to Do Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Improving Our Demo App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Host it Yourself : Back-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283