├── Views ├── Home │ └── Index.cshtml ├── _ViewStart.cshtml ├── _ViewImports.cshtml └── Shared │ └── _Layout.cshtml ├── src ├── assets │ ├── .gitkeep │ ├── client-config.json │ ├── resume.png │ └── sample.pdf ├── app │ ├── app.component.css │ ├── welcome │ │ ├── welcome.component.css │ │ ├── welcome.component.ts │ │ └── welcome.component.html │ ├── seo │ │ ├── seo-tests │ │ │ ├── seo-tests.component.css │ │ │ └── seo-tests.component.html │ │ ├── seo.module.ts │ │ └── seo-routing.module.ts │ ├── client-ip-address │ │ ├── get-ip │ │ │ ├── get-ip.component.css │ │ │ ├── get-ip.component.html │ │ │ └── get-ip.component.ts │ │ ├── ip.ts │ │ ├── client-ip-address-routing.module.ts │ │ ├── client-ip-address.module.ts │ │ └── job.service.ts │ ├── core │ │ ├── bread-crumb │ │ │ ├── bread-crumb.component.css │ │ │ ├── bread-crumb.ts │ │ │ ├── bread-crumb.component.html │ │ │ └── bread-crumb.component.ts │ │ ├── index.ts │ │ ├── window.service.ts │ │ ├── modal.service.ts │ │ ├── app-config.service.ts │ │ ├── browser-storage.service.ts │ │ ├── interceptors │ │ │ ├── loader-interceptor.service.ts │ │ │ └── retry.interceptor.ts │ │ ├── seo-service.ts │ │ ├── core.module.ts │ │ └── app.error-handler.ts │ ├── display-pdf │ │ ├── view-pdf │ │ │ ├── view-pdf.component.css │ │ │ ├── view-pdf.component.html │ │ │ └── view-pdf.component.ts │ │ ├── display-pdf-routing.module.ts │ │ ├── download-pdf-data.service.ts │ │ └── display-pdf.module.ts │ ├── page-not-found │ │ ├── page-not-found.component.css │ │ ├── page-not-found.component.html │ │ └── page-not-found.component.ts │ ├── angular-security │ │ ├── show-html │ │ │ ├── show-html.component.css │ │ │ ├── show-html.component.html │ │ │ ├── safe.pipe.ts │ │ │ └── show-html.component.ts │ │ ├── angular-security-routing.module.ts │ │ └── angular-security.module.ts │ ├── bread-crumb-sample │ │ ├── parent1 │ │ │ ├── parent1.component.css │ │ │ ├── parent1.component.html │ │ │ └── parent1.component.ts │ │ ├── parent1-child1 │ │ │ ├── parent1-child1.component.css │ │ │ ├── parent1-child1.component.html │ │ │ └── parent1-child1.component.ts │ │ ├── parent1-child1-child1 │ │ │ ├── parent1-child1-child1.component.css │ │ │ ├── parent1-child1-child1.component.html │ │ │ └── parent1-child1-child1.component.ts │ │ ├── bread-crumb-sample.module.ts │ │ └── bread-crumb-sample-routing.module.ts │ ├── product │ │ ├── product-group │ │ │ ├── product-group.component.css │ │ │ ├── product-group.component.html │ │ │ └── product-group.component.ts │ │ ├── category.ts │ │ ├── product.ts │ │ ├── product-group-form.ts │ │ ├── product-routing.module.ts │ │ ├── product.module.ts │ │ └── product-items.service.ts │ ├── shared │ │ ├── confirm-modal │ │ │ ├── confirm-modal.component.css │ │ │ ├── confirm-modal.component.ts │ │ │ └── confirm-modal.component.html │ │ ├── shared.bootstrap.module.ts │ │ └── shared.module.ts │ ├── timers │ │ ├── using-timers │ │ │ ├── using-timers.component.css │ │ │ ├── using-timers.component.html │ │ │ └── using-timers.component.ts │ │ ├── timers.module.ts │ │ └── timers-routing.module.ts │ ├── custom-two-way-data-binding │ │ ├── child │ │ │ ├── child.component.css │ │ │ ├── child.component.html │ │ │ └── child.component.ts │ │ ├── parent │ │ │ ├── parent.component.css │ │ │ ├── parent.component.ts │ │ │ └── parent.component.html │ │ ├── custom-two-way-data-binding-routing.module.ts │ │ └── custom-two-way-data-binding.module.ts │ ├── linq-like-methods │ │ ├── linq-tests │ │ │ ├── linq-tests.component.css │ │ │ └── linq-tests.component.html │ │ ├── person.ts │ │ ├── linq-like-methods-routing.module.ts │ │ └── linq-like-methods.module.ts │ ├── custom-validators │ │ ├── user-register │ │ │ ├── user-register.component.css │ │ │ └── user-register.component.ts │ │ ├── user.ts │ │ ├── custom-validators-routing.module.ts │ │ ├── email-validator.directive.ts │ │ ├── custom-validators.module.ts │ │ └── equal-validator.directive.ts │ ├── employee │ │ ├── employee-register │ │ │ ├── employee-register.component.css │ │ │ └── employee-register.component.ts │ │ ├── employee.ts │ │ ├── employee-routing.module.ts │ │ ├── employee.module.ts │ │ └── form-poster.service.ts │ ├── service-component-communication │ │ ├── final │ │ │ ├── final.component.css │ │ │ ├── final.component.html │ │ │ └── final.component.ts │ │ ├── first │ │ │ ├── first.component.css │ │ │ ├── first.component.html │ │ │ └── first.component.ts │ │ ├── second │ │ │ ├── second.component.css │ │ │ ├── second.component.html │ │ │ └── second.component.ts │ │ ├── third │ │ │ ├── third.component.css │ │ │ ├── third.component.html │ │ │ └── third.component.ts │ │ ├── sample.service.ts │ │ ├── service-component-communication-routing.module.ts │ │ └── service-component-communication.module.ts │ ├── custom-pipe │ │ ├── moment-jalaali-test │ │ │ ├── moment-jalaali-test.component.css │ │ │ ├── moment-jalaali-test.component.html │ │ │ └── moment-jalaali-test.component.ts │ │ ├── moment-jalaali.pipe.ts │ │ ├── custom-pipe-routing.module.ts │ │ ├── custom-pipe.module.ts │ │ └── json-dates.service.ts │ ├── upload-file │ │ ├── upload-file-simple │ │ │ ├── upload-file-simple.component.css │ │ │ ├── upload-file-simple.component.html │ │ │ └── upload-file-simple.component.ts │ │ ├── ng2-file-upload-test │ │ │ ├── ng2-file-upload-test.component.css │ │ │ └── ng2-file-upload-test.component.html │ │ ├── upload-file-with-progress-bar │ │ │ ├── upload-file-with-progress-bar.component.css │ │ │ └── upload-file-with-progress-bar.component.html │ │ ├── ticket.ts │ │ ├── upload-file-routing.module.ts │ │ ├── upload-file.module.ts │ │ ├── upload-file-simple.service.ts │ │ └── upload-file-with-progress-bar.service.ts │ ├── using-third-party-libraries │ │ ├── typed-sha │ │ │ ├── typed-sha.component.css │ │ │ ├── typed-sha.component.html │ │ │ └── typed-sha.component.ts │ │ ├── untyped-sha │ │ │ ├── untyped-sha.component.css │ │ │ ├── untyped-sha.component.html │ │ │ └── untyped-sha.component.ts │ │ ├── using-third-party-libraries.module.ts │ │ └── using-third-party-libraries-routing.module.ts │ ├── angular-http-client-blob │ │ ├── download-blobs │ │ │ ├── download-blobs.component.css │ │ │ ├── download-blobs.component.html │ │ │ └── download-blobs.component.ts │ │ ├── download-binary-data.service.ts │ │ ├── angular-http-client-blob-routing.module.ts │ │ └── angular-http-client-blob.module.ts │ ├── autocomplete │ │ ├── autocomplete-sample │ │ │ ├── autocomplete-sample.component.css │ │ │ ├── autocomplete-sample.component.html │ │ │ └── autocomplete-sample.component.ts │ │ ├── autocomplete-routing.module.ts │ │ ├── autocomplete.module.ts │ │ └── search.service.ts │ ├── injection-beyond-classes │ │ ├── test-providers │ │ │ ├── test-providers.component.css │ │ │ ├── test-providers.component.html │ │ │ └── test-providers.component.ts │ │ ├── thismodule.config.ts │ │ ├── injection-beyond-classes-routing.module.ts │ │ ├── car.service.ts │ │ └── injection-beyond-classes.module.ts │ ├── post-form-urlencoded │ │ ├── test-urlencoded │ │ │ ├── test-urlencoded.component.css │ │ │ ├── test-urlencoded.component.html │ │ │ └── test-urlencoded.component.ts │ │ ├── post-form-urlencoded-routing.module.ts │ │ ├── post-form-urlencoded.module.ts │ │ └── urlencoded.service.ts │ ├── modal-bootstrap-dialogs │ │ ├── modal-dialog-test │ │ │ ├── modal-dialog-test.component.css │ │ │ ├── modal-dialog-test.component.html │ │ │ └── modal-dialog-test.component.ts │ │ ├── modal-bootstrap-dialogs-routing.module.ts │ │ └── modal-bootstrap-dialogs.module.ts │ ├── read-app-config │ │ ├── read-app-config-test │ │ │ ├── read-app-config-test.component.css │ │ │ ├── read-app-config-test.component.html │ │ │ └── read-app-config-test.component.ts │ │ ├── read-app-config-routing.module.ts │ │ └── read-app-config.module.ts │ ├── detect-common-errors │ │ ├── detect-common-errors-test │ │ │ ├── detect-common-errors-test.component.css │ │ │ └── detect-common-errors-test.component.html │ │ ├── pony.ts │ │ ├── detect-common-errors-routing.module.ts │ │ └── detect-common-errors.module.ts │ ├── browser-storage-sample │ │ ├── browser-storage-sample-test │ │ │ ├── browser-storage-sample-test.component.css │ │ │ ├── browser-storage-sample-test.component.html │ │ │ └── browser-storage-sample-test.component.ts │ │ ├── browser-storage-sample-routing.module.ts │ │ └── browser-storage-sample.module.ts │ ├── model-state-validation │ │ ├── model-state-validation-test │ │ │ ├── model-state-validation-test.component.css │ │ │ ├── model-state-validation-test.component.ts │ │ │ └── model-state-validation-test.component.html │ │ ├── movie.ts │ │ ├── model-state-validation-routing.module.ts │ │ ├── model-state-validation.module.ts │ │ └── movie.service.ts │ ├── simple-grid │ │ ├── products-list │ │ │ └── products-list.component.css │ │ ├── paged-query-result.ts │ │ ├── app-product.ts │ │ ├── grid-column.ts │ │ ├── paged-query-model.ts │ │ ├── simple-grid-routing.module.ts │ │ ├── simple-grid.module.ts │ │ └── products-list.service.ts │ ├── app.component.ts │ └── app-routing.module.ts ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── typings.d.ts ├── tsconfig.app.json ├── index.html ├── main.ts ├── tsconfig.spec.json ├── styles.css ├── test.ts └── polyfills.ts ├── _2-dotnet_run.bat ├── _1-ng-build-dev.bat ├── _1-ng-build-prod.bat ├── _2-ng-serve-proxy.bat ├── _0-restore.bat ├── favicon.ico ├── _3_update_npm_packages.bat ├── proxy.config.json ├── Models ├── Ticket.cs ├── PagedQueryResult.cs ├── Product.cs ├── Category.cs ├── Employee.cs ├── ProductQueryViewModel.cs ├── Movie.cs ├── ProductDataSource.cs └── CategoriesDataSource.cs ├── e2e ├── tsconfig.e2e.json ├── app.po.ts └── app.e2e-spec.ts ├── Controllers ├── HomeController.cs ├── ShowImagesController.cs ├── UrlencodedController.cs ├── ReportsController.cs ├── MomentJalaaliController.cs ├── MoviesController.cs ├── TypeaheadController.cs ├── EmployeeController.cs └── SimpleUploadController.cs ├── .editorconfig ├── .github ├── lock.yml └── issue_template.md ├── .vscode ├── tasks.json └── launch.json ├── Program.cs ├── protractor.conf.js ├── Properties └── launchSettings.json ├── AngularTemplateDrivenFormsLab.csproj ├── AngularTemplateDrivenFormsLab.sln ├── karma.conf.js ├── tsconfig.json ├── Utils ├── AngularPushStateRoutingMiddleware.cs ├── AntiforgeryTokenMiddleware.cs ├── ContentSecurityPolicyMiddleware.cs └── IQueryableExtensions.cs ├── web.config ├── package.json └── Startup.cs /Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/app.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_2-dotnet_run.bat: -------------------------------------------------------------------------------- 1 | dotnet watch run -------------------------------------------------------------------------------- /_1-ng-build-dev.bat: -------------------------------------------------------------------------------- 1 | ng build --watch -------------------------------------------------------------------------------- /src/app/welcome/welcome.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_1-ng-build-prod.bat: -------------------------------------------------------------------------------- 1 | ng build --prod --watch -------------------------------------------------------------------------------- /src/app/seo/seo-tests/seo-tests.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/client-ip-address/get-ip/get-ip.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/core/bread-crumb/bread-crumb.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/display-pdf/view-pdf/view-pdf.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/page-not-found/page-not-found.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/angular-security/show-html/show-html.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/bread-crumb-sample/parent1/parent1.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/product/product-group/product-group.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/shared/confirm-modal/confirm-modal.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/timers/using-timers/using-timers.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/custom-two-way-data-binding/child/child.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/custom-two-way-data-binding/parent/parent.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/linq-like-methods/linq-tests/linq-tests.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /_2-ng-serve-proxy.bat: -------------------------------------------------------------------------------- 1 | ng serve --proxy-config proxy.config.json -o -------------------------------------------------------------------------------- /src/app/custom-validators/user-register/user-register.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/employee/employee-register/employee-register.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/service-component-communication/final/final.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/service-component-communication/first/first.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/service-component-communication/second/second.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/service-component-communication/third/third.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/bread-crumb-sample/parent1-child1/parent1-child1.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/custom-pipe/moment-jalaali-test/moment-jalaali-test.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/upload-file/upload-file-simple/upload-file-simple.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/using-third-party-libraries/typed-sha/typed-sha.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/using-third-party-libraries/untyped-sha/untyped-sha.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/angular-http-client-blob/download-blobs/download-blobs.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/autocomplete/autocomplete-sample/autocomplete-sample.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/injection-beyond-classes/test-providers/test-providers.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/post-form-urlencoded/test-urlencoded/test-urlencoded.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/upload-file/ng2-file-upload-test/ng2-file-upload-test.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 2 | -------------------------------------------------------------------------------- /src/app/modal-bootstrap-dialogs/modal-dialog-test/modal-dialog-test.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/read-app-config/read-app-config-test/read-app-config-test.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/client-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "host": "http://localhost:5000" 3 | } 4 | -------------------------------------------------------------------------------- /src/app/bread-crumb-sample/parent1-child1-child1/parent1-child1-child1.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/seo/seo-tests/seo-tests.component.html: -------------------------------------------------------------------------------- 1 |
2 | page-not-found works! 3 |
4 | -------------------------------------------------------------------------------- /src/app/browser-storage-sample/browser-storage-sample-test/browser-storage-sample-test.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/model-state-validation/model-state-validation-test/model-state-validation-test.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VahidN/angular-template-driven-forms-lab/HEAD/src/favicon.ico -------------------------------------------------------------------------------- /src/app/linq-like-methods/linq-tests/linq-tests.component.html: -------------------------------------------------------------------------------- 1 |2 | test-urlencoded works! 3 |
4 | -------------------------------------------------------------------------------- /src/app/bread-crumb-sample/parent1-child1-child1/parent1-child1-child1.component.html: -------------------------------------------------------------------------------- 1 |2 | parent1-child1-child1 works! 3 |
4 | -------------------------------------------------------------------------------- /src/app/simple-grid/paged-query-result.ts: -------------------------------------------------------------------------------- 1 | export interface PagedQueryResultparent1 works!
2 | Go to Parent1Child1 3 | -------------------------------------------------------------------------------- /src/app/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./browser-storage.service"; 2 | export * from "./app-config.service"; 3 | export * from "./seo-service"; 4 | -------------------------------------------------------------------------------- /src/app/core/bread-crumb/bread-crumb.ts: -------------------------------------------------------------------------------- 1 | export interface BreadCrumb { 2 | label: string; 3 | url?: string; 4 | glyphIcon?: string; 5 | }; 6 | -------------------------------------------------------------------------------- /src/app/product/category.ts: -------------------------------------------------------------------------------- 1 | export class Category { 2 | constructor( 3 | public categoryId: number, 4 | public categoryName: string 5 | ) { } 6 | } 7 | -------------------------------------------------------------------------------- /src/app/product/product.ts: -------------------------------------------------------------------------------- 1 | export class Product { 2 | constructor( 3 | public productId: number, 4 | public productName: string 5 | ) { } 6 | } 7 | -------------------------------------------------------------------------------- /src/app/using-third-party-libraries/typed-sha/typed-sha.component.html: -------------------------------------------------------------------------------- 1 |String: This is a test
4 |HEX: {{hash}}
5 | -------------------------------------------------------------------------------- /src/app/client-ip-address/get-ip/get-ip.component.html: -------------------------------------------------------------------------------- 1 |{{ clientIp | json}}
4 | String: This is a test
4 |HEX: {{hash}}
5 | -------------------------------------------------------------------------------- /src/app/bread-crumb-sample/parent1-child1/parent1-child1.component.html: -------------------------------------------------------------------------------- 1 |parent1-child1 works!
2 | Go to Parent1Child1Child1 3 | -------------------------------------------------------------------------------- /src/app/product/product-group-form.ts: -------------------------------------------------------------------------------- 1 | export class ProductGroupForm { 2 | constructor( 3 | public categoryId?: number, 4 | public productId?: number 5 | ) { } 6 | } 7 | -------------------------------------------------------------------------------- /src/app/read-app-config/read-app-config-test/read-app-config-test.component.html: -------------------------------------------------------------------------------- 1 |2 | detect-common-errors-test works! 3 |
4 | 5 |Hello {{ponyModel.name}} 6 | 7 |
{{message}}
7 |{{message}}
7 | 8 |{{editedMsg}}
7 | 8 | 9 |{{ args?.message }}
9 |Bound value:
4 |{{htmlContent}}
5 | 6 |Result of binding to innerHTML:
7 | 8 | 9 |Result of binding to dataContainer:
10 | 11 | 12 |Result of bypassSecurityTrustHtml:
13 | 14 | 15 |Result of binding to sanitizedHtml:
16 | 17 | 18 |Result of using the safe pipe:
19 | 20 | -------------------------------------------------------------------------------- /src/app/browser-storage-sample/browser-storage-sample-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserStorageSampleTestComponent } from "./browser-storage-sample-test/browser-storage-sample-test.component"; 2 | import { NgModule } from "@angular/core"; 3 | import { Routes, RouterModule } from "@angular/router"; 4 | 5 | const routes: Routes = [ 6 | { path: "showBrowserStorageSample", component: BrowserStorageSampleTestComponent } 7 | ]; 8 | 9 | @NgModule({ 10 | imports: [RouterModule.forChild(routes)], 11 | exports: [RouterModule] 12 | }) 13 | export class BrowserStorageSampleRoutingModule { } 14 | -------------------------------------------------------------------------------- /src/app/custom-pipe/moment-jalaali-test/moment-jalaali-test.component.html: -------------------------------------------------------------------------------- 1 |