AngularJS Web Application Development Cookbook
By Matt Frisbie
()
About this ebook
Packed with easy-to-follow recipes, this practical guide will show you how to unleash the full might of the AngularJS framework. Skip straight to practical solutions and quick, functional answers to your problems without hand-holding or slogging through the basics. Avoid antipatterns and pitfalls, and squeeze the maximum amount out of the most powerful parts of the framework, from creating promise-driven applications to building an extensible event bus. Throughout, take advantage of a clear problem-solving approach that offers code samples and explanations of components you should be using in your production applications.
Read more from Matt Frisbie
Professional JavaScript for Web Developers Rating: 0 out of 5 stars0 ratingsAngular 2 Cookbook Rating: 0 out of 5 stars0 ratingsAngularJS: Maintaining Web Applications Rating: 1 out of 5 stars1/5
Related to AngularJS Web Application Development Cookbook
Related ebooks
PhantomJS Cookbook Rating: 0 out of 5 stars0 ratingsMeteor Cookbook Rating: 5 out of 5 stars5/5PHP Ajax Cookbook Rating: 2 out of 5 stars2/5Libgdx Cross-platform Game Development Cookbook Rating: 0 out of 5 stars0 ratingsPostgreSQL 9 Administration Cookbook - Second Edition Rating: 0 out of 5 stars0 ratingsPhpStorm Cookbook Rating: 0 out of 5 stars0 ratingsNode Cookbook: Second Edition Rating: 3 out of 5 stars3/5ASP.NET jQuery Cookbook - Second Edition Rating: 0 out of 5 stars0 ratingsLaravel 5.x Cookbook Rating: 0 out of 5 stars0 ratingsiOS Development with Xamarin Cookbook Rating: 0 out of 5 stars0 ratingsPostgreSQL 9 High Availability Cookbook Rating: 5 out of 5 stars5/5MongoDB Cookbook - Second Edition Rating: 0 out of 5 stars0 ratingsCakePHP 1.3 Application Development Cookbook Rating: 0 out of 5 stars0 ratingsWildFly Performance Tuning Rating: 0 out of 5 stars0 ratingsNode.js 6.x Blueprints Rating: 0 out of 5 stars0 ratingsAngularJS Deployment Essentials Rating: 0 out of 5 stars0 ratingsLearn Meteor - Node.js and MongoDB JavaScript platform Rating: 5 out of 5 stars5/5You Want to Do What with PHP? Rating: 3 out of 5 stars3/5ASP.NET 4.0 in Practice Rating: 0 out of 5 stars0 ratingsLo-Dash Essentials Rating: 0 out of 5 stars0 ratingsAWS Certified Database Study Guide: Specialty (DBS-C01) Exam Rating: 0 out of 5 stars0 ratingsMastering MeteorJS Application Development Rating: 4 out of 5 stars4/5jQuery Mobile Web Development Essentials - Third Edition Rating: 0 out of 5 stars0 ratingsLocation-Aware Applications Rating: 0 out of 5 stars0 ratingsjQuery 1.3 with PHP Rating: 0 out of 5 stars0 ratingsPentaho Analytics for MongoDB Cookbook Rating: 0 out of 5 stars0 ratingsAngularJS Web Application Development Blueprints Rating: 0 out of 5 stars0 ratingsASP.NET 2.0 Web Parts in Action: Building Dynamic Web Portals Rating: 0 out of 5 stars0 ratingsJava 9 with JShell Rating: 0 out of 5 stars0 ratingsImplementing Splunk - Second Edition Rating: 0 out of 5 stars0 ratings
Internet & Web For You
Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5Coding For Dummies Rating: 5 out of 5 stars5/5More Porn - Faster!: 50 Tips & Tools for Faster and More Efficient Porn Browsing Rating: 3 out of 5 stars3/5Introduction to Internet Scams and Fraud: Credit Card Theft, Work-At-Home Scams and Lottery Scams Rating: 4 out of 5 stars4/5Hacking : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Ethical Hacking Rating: 5 out of 5 stars5/5The $1,000,000 Web Designer Guide: A Practical Guide for Wealth and Freedom as an Online Freelancer Rating: 5 out of 5 stars5/5The Logo Brainstorm Book: A Comprehensive Guide for Exploring Design Directions Rating: 4 out of 5 stars4/5SEO For Dummies Rating: 4 out of 5 stars4/5Cybersecurity For Dummies Rating: 4 out of 5 stars4/5Beginner's Guide To Starting An Etsy Print-On-Demand Shop Rating: 0 out of 5 stars0 ratingsTor and the Dark Art of Anonymity Rating: 5 out of 5 stars5/5How To Make Money Blogging: How I Replaced My Day-Job With My Blog and How You Can Start A Blog Today Rating: 4 out of 5 stars4/5Wireless Hacking 101 Rating: 4 out of 5 stars4/5The Digital Marketing Handbook: A Step-By-Step Guide to Creating Websites That Sell Rating: 5 out of 5 stars5/5Everybody Lies: Big Data, New Data, and What the Internet Can Tell Us About Who We Really Are Rating: 4 out of 5 stars4/5Grokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5200+ Ways to Protect Your Privacy: Simple Ways to Prevent Hacks and Protect Your Privacy--On and Offline Rating: 0 out of 5 stars0 ratingsThe Cyber Attack Survival Manual: Tools for Surviving Everything from Identity Theft to the Digital Apocalypse Rating: 0 out of 5 stars0 ratingsSix Figure Blogging Blueprint Rating: 5 out of 5 stars5/5The Beginner's Affiliate Marketing Blueprint Rating: 4 out of 5 stars4/5Social Engineering: The Science of Human Hacking Rating: 3 out of 5 stars3/5How To Start A Podcast Rating: 4 out of 5 stars4/5The Internet Is Not What You Think It Is: A History, a Philosophy, a Warning Rating: 4 out of 5 stars4/5Podcasting For Dummies Rating: 4 out of 5 stars4/5How to Be Invisible: Protect Your Home, Your Children, Your Assets, and Your Life Rating: 4 out of 5 stars4/5
Reviews for AngularJS Web Application Development Cookbook
0 ratings0 reviews
Book preview
AngularJS Web Application Development Cookbook - Matt Frisbie
Table of Contents
AngularJS Web Application Development Cookbook
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Sections
Getting ready
How to do it…
How it works…
There's more…
See also
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Maximizing AngularJS Directives
Introduction
Building a simple element directive
How to do it…
How it works…
There's more…
Working through the directive spectrum
How to do it…
The element directive
The attribute directive
The class directive
The comment directive
How it works…
There's more…
See also
Manipulating the DOM
How to do it…
How it works…
There's more…
See also
Linking directives
How to do it…
How it works…
There's more…
See also
Interfacing with a directive using isolate scope
Getting ready
How to do it…
How it works…
There's more…
See also
Interaction between nested directives
Getting ready
How to do it…
How it works…
See also
Optional nested directive controllers
Getting ready
How to do it…
How it works…
Directive scope inheritance
Getting ready
How to do it…
How it works…
See also
Directive templating
Getting ready
How to do it…
How it works…
See also
Isolate scope
Getting ready
How to do it…
How it works…
See also
Directive transclusion
How to do it…
How it works…
See also
Recursive directives
Getting ready
How to do it…
The $compile service
The angular.element() method
The $templateCache
How it works…
There's more…
See also
2. Expanding Your Toolkit with Filters and Service Types
Introduction
Using the uppercase and lowercase filters
How to do it…
How it works…
There's more…
See also
Using the number and currency filters
Getting ready…
How to do it…
How it works…
There's more…
See also…
Using the date filter
Getting ready…
How to do it…
How it works…
There's more…
Debugging using the json filter
Getting ready…
How to do it…
How it works…
There's more…
Using data filters outside the template
Getting ready
How to do it…
How it works…
There's more…
Using built-in search filters
Getting ready
How to do it…
How it works…
See also
Chaining filters
Getting ready
How to do it…
How it works…
There's more…
Creating custom data filters
How to do it…
How it works…
There's more…
Creating custom search filters
Getting ready
How to do it…
Filtering with custom comparators
Getting ready
How to do it…
How it works…
See also
Building a search filter from scratch
Getting ready
How to do it…
How it works…
There's more…
See also
Building a custom search filter expression from scratch
How to do it…
How it works…
There's more…
Using service values and constants
How to do it…
Service value
Service constant
How it works…
See also
Using service factories
How to do it…
How it works…
See also
Using services
How to do it…
How it works…
See also
Using service providers
How to do it…
How it works…
There's more…
See also
Using service decorators
How to do it…
How it works…
See also
3. AngularJS Animations
Introduction
Creating a simple fade in/out animation
Getting ready
How to do it…
How it works…
There's more…
Keeping things clean
No more boilerplate animation styling
See also
Replicating jQuery's slideUp() and slideDown() methods
Getting ready
How to do it…
How it works…
See also
Creating enter animations with ngIf
Getting ready
How to do it…
CSS3 transition
CSS3 animation
JavaScript animation
How it works…
There's more…
See also
Creating leave and concurrent animations with ngView
Getting ready
How to do it…
CSS3 transition
CSS3 animation
JavaScript animation
How it works…
See also
Creating move animations with ngRepeat
Getting ready
How to do it…
CSS3 transition
CSS3 animation
JavaScript animation
How it works…
There's more…
See also
Creating addClass animations with ngShow
Getting ready
How to do it…
CSS transitions
CSS animation
JavaScript animation
How it works…
See also
Creating removeClass animations with ngClass
Getting ready
How to do it…
CSS transitions
CSS animation
JavaScript animation
How it works…
See also
Staggering batched animations
Getting ready
How to do it…
How it works…
There's more…
See also
4. Sculpting and Organizing your Application
Introduction
Manually bootstrapping an application
Getting ready
How to do it…
How it works…
There's more…
Using safe $apply
Getting ready
How to do it…
How it works…
There's more…
Anti-pattern awareness
Application file and module organization
Getting ready
How to do it…
One module, one file, and one name
Keep your related files close, keep your unit tests closer
Group by feature, not by component type
Don't fight reusability
An example directory structure
Hiding AngularJS from the user
Getting ready
How to do it…
How it works…
There's more…
Managing application templates
Getting ready
How to do it…
The string template
Remote server templates
Inline templates using ng-template
Pre-defined templates in the cache
How it works…
There's more…
The Controller as
syntax
Getting ready
How to do it…
How it works…
There's more…
5. Working with the Scope and Model
Introduction
Configuring and using AngularJS events
How to do it…
Broadcasting an event
Emitting an event
Deregistering an event listener
Managing $scope inheritance
Getting ready
How to do it…
How it works…
There's more…
Troublemaker built-in directives
ngController
ngInclude
ngView
ngRepeat
ngIf
ngSwitch
Working with AngularJS forms
How to do it…
What the form offers you
Tracking the form state
Validating the form
Built-in and custom validators
How it works…
Working with
Getting ready
How to do it…
Populating with an array
Explicitly defining the option values
Explicitly defining the option model assignment
Implementing option groups
Null options
Populating with an object
Explicitly defining option values
How it works…
There's more…
Building an event bus
Getting ready
How to do it…
Basic implementation
Cleanup
Event bus as a service
Event bus as a decorator
How it works…
There's more…
6. Testing in AngularJS
Introduction
Configuring and running your test environment in Yeoman and Grunt
How to do it…
Using the right tools for the job
How it works…
There's more…
See also
Understanding Protractor
How it works…
There's more…
See also
Incorporating E2E tests and Protractor in Grunt
Getting ready
How to do it…
Installation
Selenium's WebDriver manager
Modifying your Gruntfile
Setting your Protractor configuration
Running the test suite
How it works…
See also
Writing basic unit tests
Getting ready
How to do it…
Initializing the unit tests
Creating the unit tests
How it works…
Initializing the controller
Initializing the HTTP backend
Formally running the unit tests
There's more…
Writing basic E2E tests
Getting ready
How to do it…
How it works…
There's more…
See also
Setting up a simple mock backend server
How to do it…
How it works…
There's more…
See also
Writing DAMP tests
How to do it…
There's more…
See also
Using the Page Object test pattern
How to do it…
How it works…
There's more…
See also
7. Screaming Fast AngularJS
Introduction
Recognizing AngularJS landmines
How to do it…
Expensive filters in ng-repeat
Deep watching a large object
Using $watchCollection when the index of change is needed
Keeping template watchers under control
There's more…
See also
Creating a universal watch callback
How to do it…
How it works…
There's more…
See also
Inspecting your application's watchers
How to do it…
How it works…
There's more…
See also
Deploying and managing $watch types efficiently
How to do it…
Watch as little of the model as possible
Keep watch expressions as lightweight as possible
Use the fewest number of watchers possible
Keep the watch callbacks small and light
Create DRY watchers
See also
Optimizing the application using reference $watch
How to do it…
How it works…
There's more…
See also
Optimizing the application using equality $watch
How to do it…
How it works…
There's more…
See also
Optimizing the application using $watchCollection
How to do it…
How it works…
There's more…
See also
Optimizing the application using $watch deregistration
How to do it…
How it works…
See also
Optimizing template-binding watch expressions
How to do it…
How it works…
There's more…
See also
Optimizing the application with the compile phase in ng-repeat
Getting ready
How to do it…
How it works…
There's more…
See also
Optimizing the application using track by in ng-repeat
How to do it…
How it works…
See also
Trimming down watched models
How to do it…
How it works…
There's more…
See also
8. Promises
Introduction
Understanding and implementing a basic promise
How to do it…
How it works…
Basic components and behavior of a promise
Deferreds
Promises
See also
Chaining promises and promise handlers
Getting ready
How to do it…
Data handoff for chained handlers
Rejecting a chained handler
How it works…
There's more…
Promise handler trees
The catch() method
The finally() method
See also
Implementing promise notifications
How to do it…
How it works…
There's more…
Implementing promise barriers with $q.all()
How to do it…
How it works…
There's more…
See also
Creating promise wrappers with $q.when()
How to do it…
How it works…
There's more…
See also
Using promises with $http
How to do it…
How it works…
See also
Using promises with $resource
How to do it…
How it works…
See also
Using promises with Restangular
How to do it…
How it works…
See also
Incorporating promises into native route resolves
How to do it…
How it works…
There's more…
See also
Implementing nested ui-router resolves
How to do it…
State promise inheritance
Single-state promise dependencies
How it works…
See also
9. What's New in AngularJS 1.3
Introduction
Using HTML5 datetime input types
How to do it…
The date> type
The datetime-local> type
The time> type
The week> type
The month> type
How it works…
There's more…
See also
Combining watchers with $watchGroup
How to do it…
How it works…
There's more…
See also
Sanity checking with ng-strict-di
How to do it…
There's more…
Controlling model input with ngModelOptions
Getting ready
How to do it…
The updateOn option
The debounce option
The allowInvalid option
The getterSetter option
The timezone option
The $rollbackViewValue option
How it works…
See also
Incorporating $touched and $submitted states
How to do it…
The $touched state
The $submitted state
See also
Cleaning up form errors with ngMessages
Getting ready
How to do it…
How it works…
There's more…
See also
Trimming your watch list with lazy binding
How to do it…
How it works…
There's more…
Bind once expression universality
The ng-repeat directive
Isolate scope bindings
Methods and expressions requiring execution
See also
Creating and integrating custom form validators
How to do it…
Synchronous validation
Asynchronous validation
How it works…
There's more…
See also
10. AngularJS Hacks
Introduction
Manipulating your application from the console
How to do it…
Scopes
Services
There's more…
DRYing up your controllers
Getting ready
How to do it…
How it works…
There's more…
Using ng-bind instead of ng-cloak
How to do it…
How it works…
Commenting JSON files
How to do it…
Ignored properties
Duplicate properties
Don't run with scissors
How it works…
There's more…
Creating custom AngularJS comments
How to do it…
How it works…
There's more…
Extensibility
Referencing deep properties safely using $parse
How to do it…
How it works…
There's more…
See also
Preventing redundant parsing
Getting ready
How to do it…
How it works…
See also
Index
AngularJS Web Application Development Cookbook
AngularJS Web Application Development Cookbook
Copyright © 2014 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: December 2014
Production reference: 1191214
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78328-335-4
www.packtpub.com
Cover image by Suyog Gharat (<yogiee@me.com>)
Credits
Author
Matt Frisbie
Reviewers
Pawel Czekaj
Patrick Gillespie
Aakash Patel
Adam Štipák
Commissioning Editor
Akram Hussain
Acquisition Editor
Sam Wood
Content Development Editor
Govindan K
Technical Editors
Taabish Khan
Parag Topre
Copy Editors
Deepa Nambiar
Neha Vyas
Project Coordinator
Shipra Chawhan
Proofreaders
Simran Bhogal
Maria Gould
Ameesha Green
Paul Hindle
Indexer
Mariammal Chettiyar
Graphics
Abhinash Sahu
Production Coordinator
Arvindkumar Gupta
Cover Work
Arvindkumar Gupta
About the Author
Matt Frisbie is currently a full stack developer at DoorDash (YC S13), where he joined as the first engineer. He led their adoption of AngularJS, and he also focuses on the infrastructural, predictive, and data projects within the company.
Matt has a degree in Computer Engineering from the University of Illinois at Urbana-Champaign. He is the author of the video series Learning AngularJS, available through O'Reilly Media. Previously, he worked as an engineer at several educational technology start-ups.
About the Reviewers
Pawel Czekaj has a Bachelor's degree in Computer Science. He is a web developer with strong backend (PHP, MySQL, and Unix systems) and frontend (AngularJS, Backbone.js, jQuery, and PhoneGap) experience. He loves JavaScript and AngularJS. Previously, he has worked as a senior full stack web developer. Currently, he is working as a frontend developer for Cognifide and as a web developer for SMS Air Inc. In his free time, he likes to develop mobile games. You can contact him at http://yadue.eu.
Patrick Gillespie is a senior software engineer at PROTEUS Technologies. He has been working in the field of web development for over 15 years and has both a Master's and Bachelor's degree in Computer Science. In his spare time, he enjoys working on web projects for his personal site (http://patorjk.com), spending time with his family, and listening to music.
Aakash Patel is the cofounder and CTO of Flytenow, a ride sharing platform for small planes. He has industry experience of client-side development using AngularJS, and he is a student at Carnegie Mellon University (CMU).
Adam Štipák is currently a full stack developer. He has more than 8 years of professional experience with web development. He specializes in AMP technologies (where A stands for Apache, M for MySQL, and P for PHP). He also likes other technologies such as JavaScript, AngularJS, and Grunt. He is also interested in functional programming in Scala. He likes open source software in general.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Writing about a subject as tumultuous as JavaScript frameworks is a bit like bull riding.
To Jordan, my family, and my friends—you helped me hang on.
Preface
Make it work. Make it right. Make it fast.
Back when the world was young, Kent Beck forged this prophetic sentiment. Even today, in the ultra-modern realm of performant single-page application JavaScript frameworks, his idea still holds sway. This nine-word expression describes the general progression through which a pragmatic developer creates high-quality software.
In the process of discovering how to optimally wield a technology, a developer will execute this progression many times, and each time will be a learning experience regarding some new understanding of the technology.
This cookbook is intended to act as a companion guide through this process. The recipes in this book will intimately examine every major aspect of the framework in order to maximize your comprehension. Every time you open this book, you should gain an expanded understanding of the brilliance of the AngularJS framework.
What this book covers
Chapter 1, Maximizing AngularJS Directives, dissects the various components of directives and demonstrates how to wield them in your applications. Directives are the bread and butter of AngularJS, and the tools presented in this chapter will maximize your ability to take advantage of their extensibility.
Chapter 2, Expanding Your Toolkit with Filters and Service Types, covers two major tools for code abstraction in your application. Filters are an important pipeline between the model and its appearance in the view, and are essential tools for managing data presentation. Services act as broadly applicable houses for dependency-injectable modules and resource access.
Chapter 3, AngularJS Animations, offers a collection of recipes that demonstrate various ways to effectively incorporate animations into your application. Additionally, it will dive deep down into the internals of animations in order to give you a complete perspective on how everything really works under the hood.
Chapter 4, Sculpting and Organizing Your Application, gives you strategies for controlling the application initialization, organizing your files and modules, and managing your template delivery.
Chapter 5, Working with the Scope and Model, breaks open the various components involving ngModel and provides details of the ways in which they can integrate into your application flow.
Chapter 6, Testing in AngularJS, gives you all the pieces you need to jump into writing test-driven applications. It demonstrates how to configure a fully operational testing environment, how to organize your test files and modules, and everything involved in creating a suite of unit and E2E tests.
Chapter 7, Screaming Fast AngularJS, is a response to anyone who has ever complained about AngularJS being slow. The recipes in this chapter give you all the tools you need to tune all aspects of your application's performance and take it from a steam engine to a bullet train.
Chapter 8, Promises, breaks apart the asynchronous program flow construct, exposes its internals, then builds it all the way back up to discuss strategies for your application's integration. This chapter also demonstrates how promises can and should integrate into your application's routing and resource access utilities.
Chapter 9, What's New in AngularJS 1.3, goes through how your application can integrate the slew of new features and changes that were introduced in the AngularJS 1.3 and the later AngularJS 1.2.x releases.
Chapter 10, AngularJS Hacks, is a collection of clever and interesting strategies that you can use to stretch the boundaries of AngularJS's organization and performance.
What you need for this book
Almost every example in this book has been added to JSFiddle, with the links provided in the text. This allows you to merely visit a URL in order to test and modify the code with no setup of any kind, on any major browser and on any major operating system. If you want to replicate an example outside of JSFiddle, all the external content (AngularJS, AngularJS modules, third-party libraries and modules) is served from https://code.angularjs.org/ and https://cdnjs.com/.
Chapter 6, Testing in AngularJS, involves setting up a testing framework, which should be able to be accomplished on any major Unix-based operating system (OS X and, Linux). The test suite is built on top of Grunt, Karma, Selenium, and Protractor; all of these and their dependencies can be installed through npm.
Who this book is for
There are already plenty of introductory resources to guide a green developer into the thick of AngularJS. This cookbook is for developers with at least basic knowledge of JavaScript and AngularJS, and who are looking to expand their perspective on the framework.
The goal of this text is to have you walk away from reading about an AngularJS concept armed with a solid understanding of how it works, insight into the best ways to wield it in real-world applications, and annotated code examples to get you started.
Sections
In this book, you will find several headings that appear frequently (Getting ready, How to do it, How it works, There's more, and See also).
To give clear instructions on how to complete a recipe, we use these sections as follows:
Getting ready
This section tells you what to expect in the recipe, and describes how to set up any software or any preliminary settings required for the recipe.
How to do it…
This section contains the steps required to follow the recipe.
How it works…
This section usually consists of a detailed explanation of what happened in the previous section.
There's more…
This section consists of additional information about the recipe in order to make the reader more knowledgeable about the recipe.
See also
This section provides helpful links to other useful information for the recipe.
Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: By cleverly using directives and the $compile service, this exact directive functionality is possible.
A block of code is set as follows:
(index.html)