[{ALLOW view All}]
[{ALLOW edit Markus}]
(07.10.2018)\\
Based on book ["Angular - das umfassende Handbuch"|https://www.rheinwerk-verlag.de/3988] by Andreas Höller
* Download examples [https://www.rheinwerk-verlag.de/3988]
* Install Projects:
## move to folder
## cmd > npm install (based on file [packages.json|https://docs.npmjs.com/files/package.json] in current folder)
[Angular Install & Update|AngularInstall]
[Angular and Fiori]
!Links
Public: [Tutorial|https://angular.io/tutorial] | [Wiki|https://github.com/angular/angular-cli/wiki] | [Blog|https://blog.angular.io/]
This Wiki: [Angular Binding] | [Angular Routing] | [Angular CSS] | [Angular Best Practices] | [Angular Project Steps]
[TypeScript] | [Apache & Solr|Website Creation]
! Node.js
[Node.js|https://nodejs.org] is a runtime environment for javascript on the server, [details|https://de.wikipedia.org/wiki/Node.js]. It uses the Node Package Manager (npm).
!Visual Studio
It is a free integrated development environment (IDE) with syntax highlighting, folder based projects and built-in command line view.
* [Download|https://code.visualstudio.com/] and install
* add TSLint: Extensions > search "tslint" > TSLint 1.0.28 > Install
* check Menu > File > Preferences > Keyboard Shortcuts
** Ctrl+Shift+P > command window
** Shift+Alt+F > pretty print / beautify
!Webserver "lite-server"
{{{
> npm lite-server (config via "packages.json" > "scripts")
> concurrently "tsc -p "TypeScriptFiles" -w" "lite-server"
}}}
! VSC Plugin ["HTTP Server / HTML Review"|https://github.com/ShawnFunke/vs_code_http_server_and_html_preview/issues?utm_source=vsmp&utm_medium=ms%20web&utm_campaign=mpdetails]
Settings at Extensions > right-click at "HTTP Server" > Extension Settings >
{{{
shs.serverPort 8080
shs.serverHost 127.0.0.1
shs.mainFile index.html
}}}
Start with F1 >
{{{
shs.createServer Simple HTTP Server: Create HTTP Server
shs.createServerWithSingleFile Simple HTTP Server: Create HTTP Server With Current File
}}}
[http://127.0.0.1:8080]
!Angular CLI (ng)
The angular command line interpreter (CLI) is installed with npm and can be used then via command "ng".
{{{
npm install -g @angular/cli
ng --version
ng help
}}}
Option -g installs the global CLI version. This is necessary to initially use "ng new". When you have created a project you use the local CLI version, which is then independent from the global one. \\
To update global local one use
{{{
npm i npm to update
}}}
To install / update the local one use
{{{
npm install @angular/cli
npm install --save-dev @angular/cli@latest
ng update <= THIS IS TO ANALYZE
ng update @angular/core
ng update --all
}}}
This will add entry __"@angular/cli": "^6.2.4"__ at devDependencies in your package.json.\\
To update the global CLI version use
{{{
npm install -g @angular/cli@latest
npm update -g --all
}}}
Align file [package-lock.json|https://docs.npmjs.com/files/package-lock.json]
{{{
Versions of @angular/compiler-cli and typescript could not be determined.
The most common reason for this is a broken npm install.
Please make sure your package.json contains both @angular/compiler-cli and typescript in
devDependencies, then delete node_modules and package-lock.json (if you have one) and
run npm install again.
}}}
!Built and serve [http://localhost:4200]
{{{
ng serve (in memory without files)
ng build --watch (with files)
}}}
Parameter possible: --proxy-config proxy.conf.json (CORS)
!Create project
{{{
ng new Test002
ng new Test003 --prefix=me --routing=true
}}}
Note: you need to choose a [CSS stylesheet format|Angular CSS]\\
ng uses package loader "webpack", which does not need "moduleId" for relative pathes\\
webpack configuration is in file "angular-cli.json"\\
Packages used are specified with [package.json|Angular Configuration]
!Project update
{{{
npm uninstall -g @angular/cli
npm cache clean
npm install -g @angular/cli@latest
cd projectFolder
rm -rf node_modules dist tmp
npm install --save-dev @angular/cli@latest
npm install
ng init > overwrite/skip/diff ?
> npm start = start project via npm and file "package.json" (uses devDependencies modules, not global ones)\\
(add parameter in "scripts" via "--": "npm start -- --port 8080")\\
}}}
Generate
{{{
ng generate module app-routing --flat --module=app
ng generate component hello-cli (short: ng g c hello-cli) = add component later\\
ng g directive|pipe|service|module|class|interface|enum\\
ng lint (linter TSLint) = static code validation based on file "tslint.json"\\
}}}
automated tests: \\
* component tests with karma.conf.js
* integration test with protractor.conf.js (e2e=end to end)
* > ng test (uses karma in watch mode) --watch=false
* test cases in ...specs.ts
* > npm test
* > ng e2e or npm run e2e (uses protractor, needs a running application)
* test cases in ...po.ts
!Install additional javascript libs or css (see also [package.json|Angular Configuration])
Libraries
{{{
npm install --save lodash
npm install --save-dev @types/lodash (scoped package for lodash to add types)
npm install --save bootstrap
npm install --save jquery
npm install --save @types/jquery
npm install --save velocity-animate
npm install --save rxjs
npm install --save rxjs-compat
npm install --save fancybox
}}}
See [velocity.js|http://velocityjs.org/], [Bootstrap|http://getbootstrap.com/docs/4.1/getting-started/download/]
They are added in angular.json (not in index.html) automatically, you can add custom ones, too:
{{{
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"src/styles.css"
],
"scripts": [
"node_modules/jquery/dist/jquery.js",
"node_modules/bootstrap/dist/js/bootstrap.min.js",
"node_modules/velocity-animate/velocity.min.js",
"src/assets/js/ebel-animate.js"
]
}}}
component:
{{{
import * as $ from 'jquery';
import * as velocity from 'velocity-animate';
const myElement = $('.header');
velocity(myElement, {
left: param_diff_left,
top: param_diff_top,
width: param_diff_with
}, { duration: 900 });
}}}
{{{
ng build (creates dev deployment in folder "dist", uses global modules; to use local ones create script in npm)
ng build --prod (compare angular-cli.json > "environments")
ng build --target=production --environment=prod
ng serve --prod
ng build --prod -aot
}}}
!Angular (@ng)
* "@NGModule" = configure angular module and group components and services
* "declaration" = specify global components
* module loader = manages modules and load them on demand = SystemJS via file systemjs.config.js
* module types = ES2015, AMD, CommonJS
* ts file will be compiled to js files on start or in advance via AOT
* NgFor = iterate (=class name, selector in HTML as camel case = ngFor!), prefix star (*) to create new DOM elements
"import" = something from modules\\
"@Component" = typescript decorator to configure and register component @angular\\
* decorator = add metadata to classes
* "moduleId: module.id" = enables @ng to retrive the relative path
* selector: ...
**'app-root' = html tag for component (<app-root></app-root>)
**'~[meRoot~]' = attribute for component (<div meRoot>...)
**'.meRoot' = class attribute for component (<div class="meRoot">...)
**'div:not(.goodbye)'
**'div.hello,span.hello'
* "templateUrl: <file>" = html template
backtick(`) = span string over multiple lines and add instance variables via {{name}} called interpolation\\
in opposite to property-binding\\
"export" = enables other modules to import the class\\
!file index.html
* shim and Reflect = for older browsers
* zone = from Goole to detect modell changes
* SystemJS = @ng module loader
{{{
<!-- Polyfill(s) für ältere Browser -->
<script src="node_modules/core-js/client/shim.min.js"></script>
<script src="node_modules/zone.js/dist/zone.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="systemjs.config.js"></script>
<script>
System.import('app').catch(function(err){ console.error(err); });
</script>
}}}
file systemjs.config.js specifies for SystemJS via "map" where to find modules (for "import") and packages and main file
!Dynamic Content
{{{
ng build --prod --aot=false --build-optimizer=false
}}}
[https://angular.io/docs/ts/latest/cookbook/aot-compiler.html] \\
[https://stackoverflow.com/questions/48028676/compile-dynamic-html-in-angular-4-5-something-similar-to-compile-in-angular-js] \\
[https://angular.io/guide/dynamic-component-loader] \\
[https://juristr.com/blog/2017/07/ng2-dynamic-tab-component/]\\
[https://wesleygrimes.com/angular/2019/02/05/building-an-aot-friendly-dynamic-content-outlet.html] \\
[https://blog.bitsrc.io/how-to-build-dynamic-components-in-angular-6-41f50abddc64]