Angularjs Notes For Professionals Goalkickercom download
Angularjs Notes For Professionals Goalkickercom download
download
https://ebookbell.com/product/angularjs-notes-for-professionals-
goalkickercom-22033354
https://ebookbell.com/product/angular-js-notes-for-
professionals-100-pages-of-professional-hints-and-tricks-
goalkickercom-11074474
https://ebookbell.com/product/angularjs-web-application-development-
blueprints-vinci-rufus-55893708
https://ebookbell.com/product/angularjs-maintaining-web-applications-
rodrigo-branas-chandermani-23272318
https://ebookbell.com/product/angularjs-succinctly-frederik-
dietz-36134704
Angularjs Brad Green Shyam Seshadri
https://ebookbell.com/product/angularjs-brad-green-shyam-
seshadri-4144268
https://ebookbell.com/product/angularjs-up-and-running-enhanced-
productivity-with-structured-web-apps-1st-edition-shyam-
seshadri-4912732
https://ebookbell.com/product/angularjs-essentials-rodrigo-
branas-4939658
https://ebookbell.com/product/angularjs-novice-to-ninja-1st-edition-
sandeep-panda-4944544
https://ebookbell.com/product/angularjs-web-application-development-
cookbook-matt-frisbie-4985094
AngularJS
AngularJS
Notes for Professionals
100+ pages
of professional hints and tricks
Disclaimer
GoalKicker.com This is an unocial free book created for educational purposes and is
not aliated with ocial AngularJS group(s) or company(s).
Free Programming Books All trademarks and registered trademarks are
the property of their respective owners
Contents
About ................................................................................................................................................................................... 1
Chapter 1: Getting started with AngularJS ...................................................................................................... 2
Section 1.1: Getting Started ........................................................................................................................................... 6
Section 1.2: Showcasing all common Angular constructs ......................................................................................... 7
Section 1.3: The importance of scope .......................................................................................................................... 8
Section 1.4: Minification in Angular ............................................................................................................................ 10
Section 1.5: AngularJS Getting Started Video Tutorials .......................................................................................... 11
Section 1.6: The Simplest Possible Angular Hello World .......................................................................................... 11
Chapter 2: Controllers .............................................................................................................................................. 13
Section 2.1: Your First Controller ................................................................................................................................ 13
Section 2.2: Creating Controllers, Minification safe ................................................................................................. 14
Section 2.3: Using ControllerAs in Angular JS .......................................................................................................... 15
Section 2.4: Creating Minification-Safe Angular Controllers .................................................................................. 16
Section 2.5: Creating Controllers ............................................................................................................................... 17
Section 2.6: Nested Controllers .................................................................................................................................. 17
Chapter 3: Built-in directives ................................................................................................................................ 18
Section 3.1: Angular expressions - Text vs. Number ................................................................................................ 18
Section 3.2: ngIf ........................................................................................................................................................... 18
Section 3.3: ngCloak .................................................................................................................................................... 19
Section 3.4: ngRepeat ................................................................................................................................................. 20
Section 3.5: Built-In Directives Cheat Sheet .............................................................................................................. 23
Section 3.6: ngInclude ................................................................................................................................................. 24
Section 3.7: ng-model-options ................................................................................................................................... 24
Section 3.8: ngCopy .................................................................................................................................................... 25
Section 3.9: ngPaste .................................................................................................................................................... 25
Section 3.10: ngClick .................................................................................................................................................... 26
Section 3.11: ngList ....................................................................................................................................................... 26
Section 3.12: ngOptions ............................................................................................................................................... 27
Section 3.13: ngSrc ....................................................................................................................................................... 29
Section 3.14: ngModel .................................................................................................................................................. 29
Section 3.15: ngClass ................................................................................................................................................... 30
Section 3.16: ngDblclick ............................................................................................................................................... 30
Section 3.17: ngHref ..................................................................................................................................................... 31
Section 3.18: ngPattern ............................................................................................................................................... 31
Section 3.19: ngShow and ngHide .............................................................................................................................. 32
Section 3.20: ngRequired ............................................................................................................................................ 33
Section 3.21: ngMouseenter and ngMouseleave ...................................................................................................... 33
Section 3.22: ngDisabled ............................................................................................................................................ 33
Section 3.23: ngValue .................................................................................................................................................. 34
Chapter 4: Modules ................................................................................................................................................... 35
Section 4.1: Modules .................................................................................................................................................... 35
Section 4.2: Modules ................................................................................................................................................... 35
Chapter 5: Components .......................................................................................................................................... 37
Section 5.1: Basic Components and LifeCycle Hooks .............................................................................................. 37
Section 5.2: Components In angular JS .................................................................................................................... 39
Chapter 6: Custom Directives ............................................................................................................................... 41
Section 6.1: Creating and consuming custom directives ......................................................................................... 42
Section 6.2: Directive Definition Object Template ................................................................................................... 43
Section 6.3: How to create resuable component using directive ........................................................................... 44
Section 6.4: Basic Directive example ......................................................................................................................... 46
Section 6.5: Directive decorator ................................................................................................................................. 46
Section 6.6: Basic directive with template and an isolated scope ......................................................................... 47
Section 6.7: Building a reusable component ............................................................................................................ 48
Section 6.8: Directive inheritance and interoperability ............................................................................................ 49
Chapter 7: Filters ........................................................................................................................................................ 51
Section 7.1: Accessing a filtered list from outside an ng-repeat ............................................................................ 51
Section 7.2: Custom filter to remove values ............................................................................................................. 51
Section 7.3: Custom filter to format values .............................................................................................................. 51
Section 7.4: Using filters in a controller or service ................................................................................................... 52
Section 7.5: Performing filter in a child array ........................................................................................................... 52
Chapter 8: Services .................................................................................................................................................... 54
Section 8.1: Creating a service using angular.factory ............................................................................................. 54
Section 8.2: Dierence between Service and Factory ............................................................................................ 54
Section 8.3: $sce - sanitize and render content and resources in templates ....................................................... 57
Section 8.4: How to create a Service ......................................................................................................................... 57
Section 8.5: How to use a service .............................................................................................................................. 58
Section 8.6: How to create a Service with dependencies using 'array syntax' ..................................................... 58
Section 8.7: Registering a Service .............................................................................................................................. 59
Chapter 9: Dependency Injection ....................................................................................................................... 60
Section 9.1: Dynamic Injections .................................................................................................................................. 60
Section 9.2: Dynamically load AngularJS service in vanilla JavaScript ................................................................ 60
Chapter 10: Events ...................................................................................................................................................... 61
Section 10.1: Using angular event system ................................................................................................................. 61
Section 10.2: Always deregister $rootScope.$on listeners on the scope $destory event .................................... 63
Section 10.3: Uses and significance ........................................................................................................................... 63
Chapter 11: Sharing Data ........................................................................................................................................ 66
Section 11.1: Using ngStorage to share data ............................................................................................................. 66
Section 11.2: Sharing data from one controller to another using service .............................................................. 66
Chapter 12: Constants .............................................................................................................................................. 68
Section 12.1: Create your first constant ..................................................................................................................... 68
Section 12.2: Use cases ............................................................................................................................................... 68
Chapter 13: How data binding works ................................................................................................................ 70
Section 13.1: Data Binding Example ........................................................................................................................... 70
Chapter 14: Form Validation ................................................................................................................................. 72
Section 14.1: Form and Input States ........................................................................................................................... 72
Section 14.2: CSS Classes ............................................................................................................................................ 72
Section 14.3: Basic Form Validation ........................................................................................................................... 72
Section 14.4: Custom Form Validation ....................................................................................................................... 73
Section 14.5: Async validators .................................................................................................................................... 74
Section 14.6: ngMessages ........................................................................................................................................... 74
Section 14.7: Nested Forms ......................................................................................................................................... 75
Chapter 15: Routing using ngRoute ................................................................................................................... 76
Section 15.1: Basic example ........................................................................................................................................ 76
Section 15.2: Defining custom behavior for individual routes ................................................................................. 77
Section 15.3: Route parameters example ................................................................................................................. 78
Chapter 16: ng-class directive .............................................................................................................................. 80
Section 16.1: Three types of ng-class expressions .................................................................................................... 80
Chapter 17: ng-repeat .............................................................................................................................................. 82
Section 17.1: ng-repeat-start + ng-repeat-end ......................................................................................................... 82
Section 17.2: Iterating over object properties ........................................................................................................... 82
Section 17.3: Tracking and Duplicates ....................................................................................................................... 83
Chapter 18: ng-style .................................................................................................................................................. 84
Section 18.1: Use of ng-style ....................................................................................................................................... 84
Chapter 19: ng-view ................................................................................................................................................... 85
Section 19.1: Registration navigation ......................................................................................................................... 85
Section 19.2: ng-view ................................................................................................................................................... 85
Chapter 20: AngularJS bindings options (`=`, `@`, `&` etc.) .................................................................... 87
Section 20.1: Bind optional attribute .......................................................................................................................... 87
Section 20.2: @ one-way binding, attribute binding ............................................................................................... 87
Section 20.3: = two-way binding ................................................................................................................................ 87
Section 20.4: & function binding, expression binding .............................................................................................. 88
Section 20.5: Available binding through a simple sample ...................................................................................... 88
Chapter 21: Directives using ngModelController ........................................................................................ 89
Section 21.1: A simple control: rating .......................................................................................................................... 89
Section 21.2: A couple of complex controls: edit a full object ................................................................................. 91
Chapter 22: Providers ............................................................................................................................................... 94
Section 22.1: Provider .................................................................................................................................................. 94
Section 22.2: Factory .................................................................................................................................................. 94
Section 22.3: Constant ................................................................................................................................................ 95
Section 22.4: Service ................................................................................................................................................... 95
Section 22.5: Value ...................................................................................................................................................... 96
Chapter 23: Decorators ........................................................................................................................................... 97
Section 23.1: Decorate service, factory ..................................................................................................................... 97
Section 23.2: Decorate directive ................................................................................................................................ 97
Section 23.3: Decorate filter ....................................................................................................................................... 98
Chapter 24: Print ........................................................................................................................................................ 99
Section 24.1: Print Service ........................................................................................................................................... 99
Chapter 25: ui-router .............................................................................................................................................. 101
Section 25.1: Basic Example ..................................................................................................................................... 101
Section 25.2: Multiple Views ..................................................................................................................................... 102
Section 25.3: Using resolve functions to load data ............................................................................................... 103
Section 25.4: Nested Views / States ........................................................................................................................ 104
Chapter 26: Custom filters ................................................................................................................................... 106
Section 26.1: Use a filter in a controller, a service or a filter ................................................................................. 106
Section 26.2: Create a filter with parameters ........................................................................................................ 106
Section 26.3: Simple filter example .......................................................................................................................... 106
Chapter 27: Built-in helper Functions ............................................................................................................. 108
Section 27.1: angular.equals ..................................................................................................................................... 108
Section 27.2: angular.toJson .................................................................................................................................... 108
Section 27.3: angular.copy ....................................................................................................................................... 109
Section 27.4: angular.isString ................................................................................................................................... 109
Section 27.5: angular.isArray ................................................................................................................................... 109
Section 27.6: angular.merge .................................................................................................................................... 110
Section 27.7: angular.isDefined and angular.isUndefined .................................................................................... 110
Section 27.8: angular.isDate ..................................................................................................................................... 111
Section 27.9: angular.noop ....................................................................................................................................... 111
Section 27.10: angular.isElement .............................................................................................................................. 111
Section 27.11: angular.isFunction .............................................................................................................................. 112
Section 27.12: angular.identity ................................................................................................................................. 112
Section 27.13: angular.forEach ................................................................................................................................. 113
Section 27.14: angular.isNumber .............................................................................................................................. 113
Section 27.15: angular.isObject ................................................................................................................................ 113
Section 27.16: angular.fromJson .............................................................................................................................. 114
Chapter 28: digest loop walkthrough ............................................................................................................ 115
Section 28.1: $digest and $watch ............................................................................................................................ 115
Section 28.2: the $scope tree ................................................................................................................................... 115
Section 28.3: two way data binding ........................................................................................................................ 116
Chapter 29: Angular $scopes ............................................................................................................................. 118
Section 29.1: A function available in the entire app ............................................................................................... 118
Section 29.2: Avoid inheriting primitive values ....................................................................................................... 118
Section 29.3: Basic Example of $scope inheritance .............................................................................................. 119
Section 29.4: How can you limit the scope on a directive and why would you do this? ................................... 119
Section 29.5: Using $scope functions ...................................................................................................................... 120
Section 29.6: Creating custom $scope events ....................................................................................................... 121
Chapter 30: Using AngularJS with TypeScript .......................................................................................... 123
Section 30.1: Using Bundling / Minification ............................................................................................................. 123
Section 30.2: Angular Controllers in Typescript ..................................................................................................... 123
Section 30.3: Using the Controller with ControllerAs Syntax ................................................................................ 125
Section 30.4: Why ControllerAs Syntax? ................................................................................................................. 125
Chapter 31: $http request .................................................................................................................................... 127
Section 31.1: Timing of an $http request ................................................................................................................. 127
Section 31.2: Using $http inside a controller ........................................................................................................... 127
Section 31.3: Using $http request in a service ........................................................................................................ 128
Chapter 32: Angular promises with $q service .......................................................................................... 130
Section 32.1: Wrap simple value into a promise using $q.when() ........................................................................ 130
Section 32.2: Using angular promises with $q service .......................................................................................... 130
Section 32.3: Using the $q constructor to create promises .................................................................................. 132
Section 32.4: Avoid the $q Deferred Anti-Pattern .................................................................................................. 133
Section 32.5: Using $q.all to handle multiple promises ......................................................................................... 134
Section 32.6: Deferring operations using $q.defer ................................................................................................ 135
Chapter 33: Prepare for Production - Grunt ............................................................................................... 136
Section 33.1: View preloading ................................................................................................................................... 136
Section 33.2: Script optimisation .............................................................................................................................. 137
Chapter 34: Grunt tasks ........................................................................................................................................ 139
Section 34.1: Run application locally ....................................................................................................................... 139
Chapter 35: Angular Project - Directory Structure ................................................................................. 142
Section 35.1: Directory Structure .............................................................................................................................. 142
Chapter 36: Lazy loading ...................................................................................................................................... 144
Section 36.1: Preparing your project for lazy loading ........................................................................................... 144
Section 36.2: Usage ................................................................................................................................................... 144
Section 36.3: Usage with router ............................................................................................................................... 144
Section 36.4: Using dependency injection .............................................................................................................. 145
Section 36.5: Using the directive .............................................................................................................................. 145
Chapter 37: HTTP Interceptor ............................................................................................................................ 146
Section 37.1: Generic httpInterceptor step by step ................................................................................................ 146
Section 37.2: Getting Started .................................................................................................................................... 147
Section 37.3: Flash message on response using http interceptor ........................................................................ 147
Chapter 38: Distinguishing Service vs Factory .......................................................................................... 149
Section 38.1: Factory VS Service once-and-for-all ................................................................................................ 149
Chapter 39: Use of in-built directives ............................................................................................................. 151
Section 39.1: Hide/Show HTML Elements ................................................................................................................ 151
Chapter 40: Session storage .............................................................................................................................. 152
Section 40.1: Handling session storage through service using angularjs ........................................................... 152
Chapter 41: Angular MVC ..................................................................................................................................... 153
Section 41.1: The Static View with controller ........................................................................................................... 153
Section 41.2: Controller Function Definition ............................................................................................................ 153
Section 41.3: Adding information to the model ...................................................................................................... 153
Chapter 42: The Self Or This Variable In A Controller .......................................................................... 154
Section 42.1: Understanding The Purpose Of The Self Variable .......................................................................... 154
Chapter 43: Controllers with ES6 ..................................................................................................................... 156
Section 43.1: Controller .............................................................................................................................................. 156
Chapter 44: Custom filters with ES6 .............................................................................................................. 157
Section 44.1: FileSize Filter using ES6 ....................................................................................................................... 157
Chapter 45: SignalR with AngularJS .............................................................................................................. 158
Section 45.1: SignalR and AngularJS [ ChatProject ] ............................................................................................ 158
Chapter 46: Migration to Angular 2+ ............................................................................................................. 162
Section 46.1: Converting your AngularJS app into a componend-oriented structure ....................................... 162
Section 46.2: Introducing Webpack and ES6 modules .......................................................................................... 164
Chapter 47: AngularJS with data filter, pagination etc ....................................................................... 165
Section 47.1: AngularJS display data with filter, pagination ................................................................................. 165
Chapter 48: Profiling and Performance ....................................................................................................... 166
Section 48.1: 7 Simple Performance Improvements .............................................................................................. 166
Section 48.2: Bind Once ............................................................................................................................................ 169
Section 48.3: ng-if vs ng-show ................................................................................................................................. 170
Section 48.4: Watchers ............................................................................................................................................. 170
Section 48.5: Always deregister listeners registered on other scopes other than the current scope .............. 172
Section 48.6: Scope functions and filters ................................................................................................................ 173
Section 48.7: Debounce Your Model ........................................................................................................................ 173
Chapter 49: Performance Profiling ................................................................................................................. 175
Section 49.1: All About Profiling ................................................................................................................................ 175
Chapter 50: Debugging ......................................................................................................................................... 177
Section 50.1: Using ng-inspect chrome extension .................................................................................................. 177
Section 50.2: Getting the Scope of element ........................................................................................................... 179
Section 50.3: Basic debugging in markup .............................................................................................................. 179
Chapter 51: Unit tests ............................................................................................................................................. 181
Section 51.1: Unit test a component (1.5+) ............................................................................................................... 181
Section 51.2: Unit test a filter .................................................................................................................................... 181
Section 51.3: Unit test a service ................................................................................................................................ 182
Section 51.4: Unit test a controller ........................................................................................................................... 183
Section 51.5: Unit test a directive ............................................................................................................................. 183
Chapter 52: AngularJS gotchas and traps .................................................................................................. 185
Section 52.1: Things to do when using html5Mode ................................................................................................ 185
Section 52.2: Two-way data binding stops working ............................................................................................. 186
Section 52.3: 7 Deadly Sins of AngularJS ............................................................................................................... 187
Credits ............................................................................................................................................................................ 191
You may also like ...................................................................................................................................................... 194
About
Please feel free to share this PDF with anyone for free,
latest version of this book can be downloaded from:
https://goalkicker.com/AngularJSBook
This AngularJS Notes for Professionals book is compiled from Stack Overflow
Documentation, the content is written by the beautiful people at Stack Overflow.
Text content is released under Creative Commons BY-SA, see credits at the end
of this book whom contributed to the various chapters. Images may be copyright
of their respective owners unless otherwise specified
This is an unofficial free book created for educational purposes and is not
affiliated with official AngularJS group(s) or company(s) nor Stack Overflow. All
trademarks and registered trademarks are the property of their respective
company owners
<!DOCTYPE html>
<html ng-app>
<head>
<title>Hello, Angular</title>
<script src="https://code.angularjs.org/1.5.8/angular.min.js"></script>
</head>
<body ng-init="name='World'">
<label>Name</label>
<input ng-model="name" />
<span>Hello, {{ name }}!</span>
<p ng-bind="name"></p>
</body>
</html>
Live demo
When you open the file with a browser, you will see an input field followed by the text Hello, World!. Editing the
value in the input will update the text in real-time, without the need to refresh the whole page.
Explanation:
<script src="https://code.angularjs.org/1.5.8/angular.min.js"></script>
2. Define the HTML document as an Angular application with the ng-app directive
<html ng-app>
Note that ng-init should be used for demonstrative and testing purposes only. When building an actual application,
controllers should initialize the data.
4. Bind data from the model to the view on HTML controls. Bind an <input> to the name property with ng-model
6. Another way of binding the name property is using ng-bind instead of handlebars"{{ }}"
<span ng-bind="name"></span>
The last three steps establish the two way data-binding. Changes made to the input update the model, which is
reflected in the view.
There is a difference between using handlebars and ng-bind. If you use handlebars, you might see the actual
Hello, {{name}} as the page loads before the expression is resolved (before the data is loaded) whereas if you use
ng-bind, it will only show the data when the name is resolved. As an alternative the directive ng-cloak can be used
to prevent handlebars to display before it is compiled.
<!DOCTYPE html>
<html ng-app="myDemoApp">
<head>
<style>.started { background: gold; }</style>
<script src="https://code.angularjs.org/1.5.8/angular.min.js"></script>
<script>
function MyDataService() {
return {
getWorlds: function getWorlds() {
return ["this world", "another world"];
}
};
}
function DemoController(worldsService) {
var vm = this;
vm.messages = worldsService.getWorlds().map(function(w) {
return "Hello, " + w + "!";
});
}
Live Demo
1. ng-app="myDemoApp", the ngApp directive that bootstraps the application and tells angular that a DOM
element is controlled by a specific angular.module named "myDemoApp";
2. <script src="angular.min.js"> is the first step in bootstrapping the AngularJS library;
Three functions (MyDataService, DemoController, and startup) are declared, which are used (and explained)
below.
3. angular.module(...) used with an array as the second argument creates a new module. This array is used
to supply a list of module dependencies. In this example we chain calls on the result of the module(...)
function;
4. .service(...) creates an Angular Service and returns the module for chaining;
5. .controller(...) creates an Angular Controller and returns the module for chaining;
6. .config(...) Use this method to register work which needs to be performed on module loading.
7. .run(...) makes sure code is run at startup time and takes an array of items as a parameter. Use this
method to register work which should be performed when the injector is done loading all modules.
the first item is letting Angular know that the startup function requires the built-in $rootScope service
to be injected as an argument;
the second item is letting Angular know that the startup function requires the built-in $window service
to be injected as an argument;
the last item in the array, startup, is the actual function to run on startup;
8. ng-class is the ngClass directive to set a dynamic class, and in this example utilizes hasStarted on the
$rootScope dynamically
9. ng-cloak is a directive to prevent the unrendered Angular html template (e.g. "{{ msg }}") to be briefly
shown before Angular has fully loaded the application.
10. ng-controller is the directive that asks Angular to instantiate a new controller of specific name to
orchestrate that part of the DOM;
11. ng-repeat is the directive to make Angular iterate over a collection and clone a DOM template for each item;
12. {{ msg }} showcases interpolation: on-the-spot rendering of a part of the scope or controller;
However, sooner or later, it is important to understand what exactly this $scope thing is. It will keep showing up in
<div ng-app="myApp">
<h1>Hello {{ name }}</h1>
</div>
The answer is that Angular creates a $rootScope object. This is simply a regular Javascript object and so name is a
property on the $rootScope object:
angular.module("myApp", [])
.run(function($rootScope) {
$rootScope.name = "World!";
});
And just as with global scope in Javascript, it's usually not such a good idea to add items to the global scope or
$rootScope.
Of course, most of the time, we create a controller and put our required functionality into that controller. But when
we create a controller, Angular does it's magic and creates a $scope object for that controller. This is sometimes
referred to as the local scope.
<div ng-app="myApp">
<div ng-controller="MyController">
<h1>Hello {{ name }}</h1>
</div>
</div>
would allow the local scope to be accessible via the $scope parameter.
angular.module("myApp", [])
.controller("MyController", function($scope) {
$scope.name = "Mr Local!";
});
A controller without a $scope parameter may simply not need it for some reason. But it is important to realize that,
even with controllerAs syntax, the local scope exists.
As $scope is a JavaScript object, Angular magically sets it up to prototypically inherit from $rootScope. And as you
can imagine, there can be a chain of scopes. For example, you could create a model in a parent controller and
attach to it to the parent controller's scope as $scope.model.
Then via the prototype chain, a child controller could access that same model locally with $scope.model.
None of this is initially evident, as it's just Angular doing its magic in the background. But understanding $scope is
an important step in getting to know how Angular works.
It is the process of removing all unnecessary characters from source code without changing its functionality.
Normal Syntax
If we use normal angular syntax for writing a controller then after minifiying our files it going to break our
functionality.
Here, minification removed unnecessary spaces and the $scope variable from code. So when we use this minified
code then its not going to print anything on view. Because $scope is a crucial part between controller and view,
which is now replaced by the small 'e' variable. So when you run the application it is going to give Unknown
Provider 'e' dependency error.
There are two ways of annotating your code with service name information which are minification safe:
FirstController.$inject = ['$scope'];
var FirstController = function($scope) {
$scope.message = 'Hello World !';
}
var
app=angular.module("mainApp",[]);app.controller("FirstController",["$scope",function(a){a.message="
Hello World !"}]);
Here, angular will consider variable 'a' to be treated as $scope, and It will display output as 'Hello World !'.
https://egghead.io/courses/angularjs-app-from-scratch-getting-started
https://egghead.io/courses/angularjs-application-architecture
https://egghead.io/courses/angular-material-introduction
https://egghead.io/courses/building-an-angular-1-x-ionic-application
https://egghead.io/courses/angular-and-webpack-for-modular-applications
https://egghead.io/courses/angularjs-authentication-with-jwt
https://egghead.io/courses/angularjs-data-modeling
https://egghead.io/courses/angular-automation-with-gulp
https://egghead.io/courses/learn-protractor-testing-for-angularjs
https://egghead.io/courses/ionic-quickstart-for-windows
https://egghead.io/courses/build-angular-1-x-apps-with-redux
https://egghead.io/courses/using-angular-2-patterns-in-angular-1-x-apps
We can tell Angular to treat a region of the page as an expression using the {{ }} handlebars style syntax. Anything
between the curly braces will be compiled, like so:
{{ 'Hello' + 'World' }}
HelloWorld
ng-app
<html>
<head>
<script src="/angular.js"></script>
</head>
<body ng-app>
{{ 'Hello' + 'World' }}
</body>
</html>
I've now told the body element to be the root template. Anything in it will be compiled.
Directives
Directives are compiler directives. They extend the capabilities of the Angular DOM compiler. This is why Misko, the
creator of Angular, describes Angular as:
"What a web browser would have been had it been built for web applications.
We literally create new HTML attributes and elements, and have Angular compile them into an app. ng-app is a
directive that simply turns on the compiler. Other directives include:
Angular comes with around 100 built-in directives which allow you to accomplish most common tasks. We can also
write our own, and these will be treated in the same way as the built in directives.
We build an Angular app out of a series of directives, wired together with HTML.
<!DOCTYPE html>
<html ng-app='MyFirstApp'>
Setting the app name with ng-app lets you access the application in an external Javascript file, which will be covered
below.
<script src="js/controllers.js"></script>
We'll need a Javascript file where you define your controllers and their actions/data.
The ng-controller attribute sets the controller for that DOM element and all elements that are children
(recursively) below it.
You can have multiple of the same controller (in this case, MyController) by saying ... as mc, we're giving this
instance of the controller an alias.
The {{ ... }} notation is an Angular expression. In this case, this will set the inner text of that <h1> element to
whatever the value of mc.title is.
Also note that Angular expressions do not have to reference a controller. An Angular expression can be as simple as
{{ 1 + 2 }} or {{ "Hello " + "World" }}.
<button ng-click="mc.clicked()">
ng-click is an Angular directive, in this case binding the click event for the button to trigger the clicked() function
of the MyController instance.
With those things in mind, let's write an implementation of the MyController controller. With the example above,
you would write this code in js/controller.js.
Note that the name we pass here is the same as the name you set in your HTML with the ng-app directive.
Now that we have the app object, we can use that to create controllers.
app.controller('MyController', function(){
var ctrl = this;
ctrl.clicked = function(){
alert("MyController.clicked()");
};
});
Note: For anything that we want to be a part of the controller instance, we use the this keyword.
The first is called inline array annotation. It looks like the following:
The second parameter of the controller method can accept an array of dependencies. As you can see I've defined
$scope and $http which should correspond to the parameters of the controller function in which a will be the
$scope, and b would be $http. Take note that the last item in the array should be your controller function.
The second option is using the $inject property. It looks like the following:
This does the same thing as inline array annotation but provides a different styling for those that prefer one option
over the other.
When injecting dependencies using the array form, be sure that the list of the dependencies match its
corresponding list of arguments passed to the controller function.
Note that in the following example, $scope and $http are reversed. This will cause a problem in the code.
// Intentional Bug: injected dependencies are reversed which will cause a problem
app.controller('sampleController', ['$scope', '$http',function($http, $scope) {
$http.get('sample.json');
}]);
function CustomerController() {
this.name = {};
this.sendMessage = function() { };
}
controllerAs with vm
function CustomerController() {
/*jshint validthis: true */
var vm = this;
vm.name = {};
vm.sendMessage = function() { };
}
controllerAs is syntactic sugar over $scope. You can still bind to the View and still access $scope methods. Using
controllerAs, is one of the best practices suggested by the angular core team. There are many reason for this, few
of them are -
$scope is exposing the members from the controller to the view via an intermediary object. By setting
this.*, we can expose just what we want to expose from the controller to the view. It also follow the
using controllerAs syntax, we have more readable code and the parent property can be accessed using the
alias name of the parent controller instead of using the $parent syntax.
It promotes the use of binding to a "dotted" object in the View (e.g. customer.name instead of name), which
is more contextual, easier to read, and avoids any reference issues that may occur without "dotting".
Use a capture variable for this when using the controllerAs syntax. Choose a consistent variable name such
as vm, which stands for ViewModel. Because, this keyword is contextual and when used within a function
inside a controller may change its context. Capturing the context of this avoids encountering this problem.
NOTE: using controllerAs syntax add to current scope reference to current controller, so it available as field
vm is available as $scope.vm.
The second argument in the module.controller function should be passed an array, where the last parameter is
the controller function, and every parameter before that is the name of each injected value.
This is different from the normal paradigm; that takes the controller function with the injected arguments.
Given:
app.controller('ctrlInject',
[
/* Injected Parameters */
'$Injectable1',
'$Injectable2',
/* Controller Function */
function($injectable1Instance, $injectable2Instance) {
/* Controller Content */
}
]
);
Note: The names of injected parameters are not required to match, but they will be bound in order.
var
a=angular.module('myApp');a.controller('ctrlInject',['$Injectable1','$Injectable2',function(b,c){/*
Controller Content */}]);
The minification process will replace every instance of app with a, every instance of $Injectable1Instance with b,
and every instance of $Injectable2Instance with c.
Note: The .$inject will make sure your dependencies doesn't get scrambled after minification. Also, make sure it's
in order with the named function.
$scope.childFunction = function () {
$scope.parentVariable = "I'm overriding you";
};
});
<body ng-controller="parentController">
What controller am I? {{parentVariable}}
<div ng-controller="childController">
What controller am I? {{childVariable}}
<button ng-click="childFunction()"> Click me to override! </button>
</div>
</body>
Nesting controllers may have it's benefits, but one thing must be kept in mind when doing so. Calling the
ngController directive creates a new instance of the controller - which can often create confusion and unexpected
results.
Controller
app.controller('ctrl', function($scope) {
$scope.textInput = {
value: '5'
};
$scope.numberInput = {
value: 5
};
});
View
When using + in an expression bound to text input, the operator will concatenate the strings (first example),
displaying 55 on the screen*.
When using + in an expression bound to number input, the operator return the sum of the numbers (second
example), displaying 10 on the screen*.
* - That is until the user changes the value in the input field, afterward the display will change accordingly.
Working Example
Unlike ng-show, the ng-if directive creates a child scope which uses prototypal inheritance. This means that setting
a primitive value on the child scope will not apply to the parent. To set a primitive on the parent scope the $parent
property on the child scope will have to be used.
JavaScript
angular.module('MyApp', []);
View
<div ng-controller="myController">
<div ng-if="currentUser">
Hello, {{currentUser}}
</div>
<div ng-if="!currentUser">
<a href="/login">Log In</a>
<a href="/register">Register</a>
</div>
</div>
Working Example
Function Promise
The ngIf directive accepts functions as well, which logically require to return true or false.
<div ng-if="myFunction()">
<span>Span text</span>
</div>
The span text will only appear if the function returns true.
$scope.myFunction = function() {
var result = false;
// Code to determine the boolean value of result
return result;
};
The ngCloak directive is used to prevent the Angular html template from being briefly displayed by the
browser in its raw (uncompiled) form while your application is loading. - View source
HTML
ngCloak can be applied to the body element, but the preferred usage is to apply multiple ngCloak directives to
small portions of the page to permit progressive rendering of the browser view.
ng-repeat an array
<ul>
<li ng-repeat="item in itemCollection">
{{item.Name}}
</li>
</ul>
Where:
item = individual item in the collection
itemCollection = The array you are iterating
ng-repeat an object
<ul>
<li ng-repeat="(key, value) in myObject">
{{key}} : {{value}}
</li>
</ul>
Where:
key = the property name
value = the value of the property
myObject = the object you are iterating
Where:
searchText = the text that the user wants to filter the list by
stringArray = an array of strings, e.g. ['string', 'array']
You can also display or reference the filtered items elsewhere by assigning the filter output an alias with as
To repeat multiple DOM elements by defining a start and an end point you can use the ng-repeat-start and ng-
repeat-end directives.
<ul>
<li ng-repeat-start="item in [{a: 1, b: 2}, {a: 3, b:4}]">
{{item.a}}
</li>
<li ng-repeat-end>
{{item.b}}
</li>
</ul>
Output:
1
2
3
4
Variables
Performance considerations
Rendering ngRepeat can become slow, especially when using large collections.
If the objects in the collection have an identifier property, you should always track by the identifier instead of the
whole object, which is the default functionality. If no identifier is present, you can always use the built-in $index.
ngRepeat will always create an isolated child scope so care must be taken if the parent scope needs to be accessed
inside the repeat.
Here is a simple example showing how you can set a value in your parent scope from a click event inside of
ngRepeat.
$scope.val = 0;
this.val = 0;
$scope.itemCollection = [{
id: 0,
value: 4.99,
label: 'Football'
},
{
id: 1,
value: 6.99,
label: 'Baseball'
},
{
id: 2,
value: 9.99,
label: 'Basketball'
}];
If there was only val = item.value at ng-click it won't update the val in the parent scope because of the isolated
scope. That's why the parent scope is accessed with $parent reference or with the controllerAs syntax (e.g. ng-
controller="mainController as ctrl").
Nested ng-repeat
ng-change Evaluates specified expression when the user changes the input.
ng-cloak Prevents displaying the content until AngularJS has taken control.
ng-include Used to fetch, compile and include an external HTML fragment to your page.
ng-repeat Used to loop through each item in a collection to create a new template.
ng-classeven Works in conjunction with ngRepeat and take effect only on odd (even) rows.
ng-classodd Works in conjunction with ngRepeat and take effect only on odd (even) rows.
ng-open Used to set the open attribute on the element, if the expression inside ngOpen is truthy.
An example is:
<div ng-include
src="'/gridview'"
ng-controller='gridController as gc'>
</div>
Note that the /gridview will need to be served by the web server as a distinct and legitimate url.
Also, note that the src-attribute accepts an Angular expression. This could be a variable or a function call for
example or, like in this example, a string constant. In this case you need to make sure to wrap the source URL in
single quotes, so it will be evaluated as a string constant. This is a common source of confusion.
Within the /gridview html, you can refer to the gridController as if it were wrapped around the page, eg:
<div class="row">
<button type="button" class="btn btn-default" ng-click="gc.doSomething()"></button>
</div>
Example:
The above example will attach a debounce effect of 500 milliseconds on myValue, which will cause the model to
update 500 ms after the user finished typing over the input (that is, when the myValue finished updating).
3. allowInvalid: a boolean flag allowing for an invalid value to the model, circumventing default form
validation, by default these values would be treated as undefined.
4. getterSetter: a boolean flag indicating if to treat the ng-model as a getter/setter function instead of a plain
model value. The function will then run and return the model value.
Example:
5. timezone: defines the timezone for the model if the input is of the date or time. types
In the controller
$scope.blockCopy = function(event) {
event.preventDefault();
console.log("Copying won't work");
}
The ng-click directive allows you to specify custom behavior when an element of DOM is clicked.
It is useful when you want to attach click events on buttons and handle them at your controller.
This directive accepts an expression with the events object available as $event
HTML
Controller
.controller("ctrl", function($scope) {
$scope.onClick = function(evt) {
console.debug("Hello click event: %o ",evt);
}
})
HTML
HTML
Controller
...
$scope.count = function(){
$scope.count = $scope.count + 1;
}
...
When the button is clicked, an invocation of the onClick function will print "Hello click event" followed by the event
object.
You can set the delimiter manually by assigning ng-list a delimeter like this ng-list="; ".
By default ng-list has an attribute ng-trim which is set to true. ng-trim when false, will respect white space in
your delimiter. By default, ng-list does not take white space into account unless you set ng-trim="false".
Example:
angular.module('test', [])
.controller('ngListExample', ['$scope', function($scope) {
$scope.list = ['angular', 'is', 'cool!'];
}]);
A customer delimiter is set to be ;. And the model of the input box is set to the array that was created on the scope.
The input box will display with the content: angular; is; cool!
With ng-options the markup can be reduced to just a select tag and the directive will create the same select:
<select ng-model="selectedFruitNgOptions"
ng-options="curFruit as curFruit.label for curFruit in fruit">
</select>
There is anther way of creating SELECT options using ng-repeat, but it is not recommended to use ng-repeat as it is
mostly used for general purpose like, the forEach just to loop. Whereas ng-options is specifically for creating
SELECT tag options.
<select ng-model="selectedFruit">
<option ng-repeat="curFruit in fruit" value="{{curFruit}}">
{{curFruit.label}}
</option>
</select>
FULL EXAMPLE
Lets see the above example in detail also with some variations in it.
$scope.fruit = [
Effects:
f.label will be the label of the <option> and the value will contain the entire object.
FULL EXAMPLE
Effects:
f.value (4) will be the value in this case while the label is still the same.
FULL EXAMPLE
Effects:
Options will be grouped based on there value. Options with same value will fall under one category
FULL EXAMPLE
<option disabled="" value="{ label: "Apples", value: 4, id: 2 }"> Apples </option>
"Apples" and "Limes" will be disabled (unable to select) because of the condition disable when f.value==4. All
options with value=4 shall be disabled
FULL EXAMPLE
<!-- label group by group for value in array track by trackexpr -->
<select ng-options="f.value as f.label group by f.value for f in fruit track by f.id" ng-
model="selectedFruit"></select>
Effects:
There is not visual change when using trackBy, but Angular will detect changes by the id instead of by reference
which is most always a better solution.
FULL EXAMPLE
<option disabled="" value="{ label: "Apples", value: 4, id: 2 }"> Apples </option>
Effects:
orderBy is a AngularJS standard filter which arranges options in ascending order(by default) so "Oranges" in this will
appear 1st since its id = 1.
FULL EXAMPLE
As you type in the input field or change it in any way you will see the value in the paragraph update instantly.
The ng-model variable, in this instance, will be available in your controller as $scope.myName. If you are using the
controllerAs syntax:
You will need to refer to the controller's scope by pre-pending the controller's alias defined in the ng-controller
attribute to the ng-model variable. This way you won't need to inject $scope into your controller to reference your
ng-model variable, the variable will be available as this.myName inside your controller's function.
Your object should contain key/value pairs. The key is a class name that will be applied when the value (conditional)
evaluates to true.
<style>
.active { background-color: green; color: white; }
.inactive { background-color: gray; color: white; }
.adminUser { font-weight: bold; color: yellow; }
.regularUser { color: white; }
</style>
<span ng-class="{
active: user.active,
inactive: !user.active,
adminUser: user.level === 1,
regularUser: user.level === 2
}">John Smith</span>
Angular will check the $scope.user object to see the active status and the level number. Depending on the values
in those variables, Angular will apply the matching style to the <span>.
HTML
In the above example, the value held at the input will be incremented when the button is double clicked.
The ngHref directive makes sure the link is not broken even if the user clicks the link before AngularJS has evaluated
the code.
Example 1
Example 2 This example dynamically gets the href value from input box and load it as href value.
Example 3
<script>
angular.module('angularDoc', [])
.controller('myController', function($scope) {
// Set some scope value.
// Here we set bootstrap version.
$scope.bootstrap_version = '3.3.7';
Example:
Lets say we want an <input> element to become valid when it's value (ng-model) is a valid IP address.
Template:
Controller:
The ng-hide directive is similar. However, if the value is falsy it will show the HTML element. When the expression is
truthy it will hide it.
Controller:
angular.module('app')
.controller('ExampleController', ExampleController);
function ExampleController() {
var vm = this;
View
<p>Enter Password</p>
<input ng-model="main.username" type="text">
<hr>
</section>
It is used to optionally define if an input element is required to have a non-empty value. The directive is helpful
when designing validation on complex HTML forms.
HTML
The ng-mouseenter directive runs an expression one a mouse enter event (when the user enters his mouse pointer
over the DOM element this directive resides in)
HTML
At the above example, when the user points his mouse over the div, applyStyle turns to true, which in turn
applies the .active CSS class at the ng-class.
The ng-mouseleave directive runs an expression one a mouse exit event (when the user takes his mouse cursor
away from the DOM element this directive resides in)
HTML
Reusing the first example, now when the user takes him mouse pointer away from the div, the .active class is
removed.
The ng-disabled directive accepts and expression that should evaluate to either a truthy or a falsy values.
HTML
vm.name.length===0 is evaluated to true if the input's length is 0, which is turn disables the button, disallowing the
<script>
angular.module('valueExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.names = ['pizza', 'unicorns', 'robots'];
$scope.my = { favorite: 'unicorns' };
}]);
</script>
<form ng-controller="ExampleController">
<h2>Which is your favorite?</h2>
<label ng-repeat="name in names" for="{{name}}">
{{name}}
<input type="radio"
ng-model="my.favorite"
ng-value="name"
id="{{name}}"
name="favorite">
</label>
<div>You chose {{my.favorite}}</div>
</form>
Working plnkr
Creating a module:
angular
.module('app', []);
Array [] passed in above example is the list of modules app depends on, if there are no dependencies then we pass
Empty Array i.e. [].
angular.module('app', [
'app.auth',
'app.dashboard'
]);
Referencing a module:
angular
.module('app');
declare a module
app.controller('myController', function() {
angular.module('myModule', []).
2. Run Blocks: get executed after the injector is created and are used to start the application.
angular.module('myModule', []).
run(function(injectables) {
// here you can only inject instances in to config blocks.
});
A component is basically a directive that uses a simpler configuration and that is suitable for a component-
based architecture, which is what Angular 2 is all about. Think of a component as a widget: A piece of HTML
code that you can reuse in several different places in your web application.
Component
angular.module('myApp', [])
.component('helloWorld', {
template: '<span>Hello World!</span>'
});
Markup
<div ng-app="myApp">
<hello-world> </hello-world>
</div>
Live Demo
We could add a parameter to pass a name to our component, which would be used as follows:
Markup
<div ng-app="myApp">
<hello-world name="'John'" > </hello-world>
</div>
Live Demo
angular.module("myApp", [])
.component("helloWorld",{
template: "Hello {{$ctrl.name}}, I'm {{$ctrl.myName}}!",
bindings: { name: '@' },
controller: function(){
this.myName = 'Alain';
}
});
Markup
<div ng-app="myApp">
<hello-world name="John"> </hello-world>
</div>
CodePen Demo
Parameters passed to the component are available in the controller's scope just before its $onInit function gets
called by Angular. Consider this example:
angular.module("myApp", [])
.component("helloWorld",{
template: "Hello {{$ctrl.name}}, I'm {{$ctrl.myName}}!",
bindings: { name: '@' },
controller: function(){
this.$onInit = function() {
this.myName = "Mac" + this.name;
}
}
});
In the template from above, this would render "Hello John, I'm MacJohn!".
Note that $ctrl is the Angular default value for controllerAs if one is not specified.
Live Demo
In some instances you may need to access data from a parent component inside your component.
This can be achieved by specifying that our component requires that parent component, the require will give us
reference to the required component controller, which can then be used in our controller as shown in the example
below:
Notice that required controllers are guaranteed to be ready only after the $onInit hook.
angular.module("myApp", [])
.component("helloWorld",{
template: "Hello {{$ctrl.name}}, I'm {{$ctrl.myName}}!",
bindings: { name: '@' },
require: {
parent: '^parentComponent'
},
controller: function () {
// here this.parent might not be initiated yet
this.$onInit = function() {
// after $onInit, use this.parent to access required controller
this.parent.foo();
}
}
});
Keep in mind, though, that this creates a tight coupling between the child and the parent.
angular.module("myApp",[]).component("customer", {})
Components are defined on the angular modules. They contains two arguments, One is the name of the
component and second one is a object which contains key value pair, which defines which view and which
controller it is going to use like this .
angular.module("myApp",[]).component("customer", {
templateUrl : "customer.html", // your view here
controller: customerController, //your controller here
controllerAs: "cust" //alternate name for your controller
})
"myApp" is the name of the app we are building and customer is the name of our component. Now for calling it in
main html file we will just put it like this
<customer></customer>
Now this directive will be replaced by the view you have specified and the business logic you have written in your
NOTE : Remember component take a object as second argument while directive take a factory function as
argument.
directive.js
// If you already have the app module created, comment the above line and create a reference of the
app module
var demoApp = angular.module("demoApp");
demoApp.directive('demoDirective', function () {
// The values of scope property decides how the actual scope is created and used inside a
directive. These values can be either “false”, “true” or “{}”. This creates an isolate scope for the
directive.
// '@' binding is for passing strings. These strings support {{}} expressions for interpolated
values.
// '=' binding is for two-way model binding. The model in parent scope is linked to the model in
the directive's isolated scope.
// '&' binding is for passing a method into your directive's scope so that it can be called
within your directive.
// The method is pre-bound to the directive's parent scope, and supports arguments.
scope: {
name: "@", // Always use small casing here even if it's a mix of 2-3 words
},
// compile is called during application initialization. AngularJS calls it once when html page is
loaded.
compile: function(element, attributes) {
element.css("border", "1px solid #cccccc");
// linkFunction is linked with each element with scope to get the element specific data.
<html>
<head>
<title>Angular JS Directives</title>
</head>
<body>
<script src = "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="directive.js"></script>
<div ng-app = "demoApp">
<!-- Notice we are using Spinal Casing here -->
<demo-directive name="World"></demo-directive>
</div>
</body>
</html>
1. multiElement - set to true and any DOM nodes between the start and end of the directive name will be
collected and grouped together as directive elements
2. priority - allows specification of the order to apply directives when multiple directives are defined on a
single DOM element. Directives with higher numbers are compiled first.
3. terminal - set to true and the current priority will be the last set of directives to execute
4. scope - sets scope of the directive
5. bind to controller - binds scope properties directly to directive controller
6. controller - controller constructor function
C HEAP BOOKS.—Just
CATALOGUE of BOOKS
published,
(may be had on
a
Q UARTERLY
No.
REVIEW.
CLXXX.—NOTICE.—
ADVERTISEMENTS and BILLS for the above
Periodical will be in time if forwarded to the
Publisher before the 27th inst.
JOHN MURRAY, Albemarle Street.
T OAdvertisement
SELLERS of OLD BOOKS.—The following
is inserted as an
experiment, and in the hope that, though the
Works wanted are generally of little value,
Booksellers will be so obliging as to look over
their stock, and, if they have a copy of any of
the under-mentioned, be pleased to send
notice of it, and of the price, to Mr. J.
FRANCIS, 14. Wellington Street North,
Strand, London.
A Collection of LETTERS on GOVERNMENT,
LIBERTY, and the CONSTITUTION, which
appeared from the time Lord Bute was
appointed First Lord of the Treasury to
the Death of Lord Egremont. 3 vols.
[possibly 4], published in 1774 by Almon.
A Collection of esteemed POLITICAL TRACTS,
which appeared 1764, 5, and 6, 3 or 4
vols., published 1766 or 7, by Almon.
A Collection of most interesting POLITICAL
LETTERS which appeared in the Public
Papers from 1763 to 1765. 3 or 4 vols.
Almon, 1766.
THE BRITON (a Periodical). 1763.
THE AUDITOR (a Periodical). 1763.
A Collection of all REMARKABLE and
PERSONAL PASSAGES in the BRITON,
NORTH BRITON, and AUDITOR, Almon,
1765.
THE EXPOSTULATION, a Poem. Bingley,
1768.
VOX SENATUS, 1771.
TWO REMARKABLE LETTERS of JUNIUS and
THE FREEHOLDER. 1770.
A complete Collection of JUNIUS'S LETTERS.
Thompson, 1770.
JUNIUS'S LETTERS, Wheble, 1771.
WILKES'S SPEECHES. 3 vols.
Index
Vol., Dates, Year, PG #
1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside
the United States, check the laws of your country in addition to
the terms of this agreement before downloading, copying,
displaying, performing, distributing or creating derivative works
based on this work or any other Project Gutenberg™ work. The
Foundation makes no representations concerning the copyright
status of any work in any country other than the United States.
1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if
you provide access to or distribute copies of a Project
Gutenberg™ work in a format other than “Plain Vanilla ASCII” or
other format used in the official version posted on the official
Project Gutenberg™ website (www.gutenberg.org), you must,
at no additional cost, fee or expense to the user, provide a copy,
a means of exporting a copy, or a means of obtaining a copy
upon request, of the work in its original “Plain Vanilla ASCII” or
other form. Any alternate format must include the full Project
Gutenberg™ License as specified in paragraph 1.E.1.
• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”
• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.
1.F.
Most people start at our website which has the main PG search
facility: www.gutenberg.org.
ebookbell.com