├── src
├── assets
│ └── .gitkeep
├── app
│ ├── app.component.scss
│ ├── models
│ │ ├── index.ts
│ │ └── user.ts
│ ├── components
│ │ ├── componentito
│ │ │ ├── componentito.component.scss
│ │ │ ├── index.ts
│ │ │ ├── componentito.component.html
│ │ │ ├── componentito.component.spec.ts
│ │ │ └── componentito.component.ts
│ │ ├── componentito2
│ │ │ ├── componentito2.component.scss
│ │ │ ├── index.ts
│ │ │ ├── componentito2.component.html
│ │ │ ├── componentito2.component.ts
│ │ │ └── componentito2.component.spec.ts
│ │ └── index.ts
│ ├── services
│ │ ├── index.ts
│ │ ├── example.service.spec.ts
│ │ └── example.service.ts
│ ├── app.routes.ts
│ ├── directives
│ │ ├── index.ts
│ │ ├── highlight.directive.ts
│ │ └── unless.directive.ts
│ ├── app.config.ts
│ ├── app.component.spec.ts
│ ├── app.component.ts
│ └── app.component.html
├── styles.scss
├── favicon.ico
├── main.ts
└── index.html
├── .vscode
├── extensions.json
├── launch.json
└── tasks.json
├── tsconfig.app.json
├── tsconfig.spec.json
├── .editorconfig
├── .gitignore
├── tsconfig.json
├── package.json
├── angular.json
└── README.md
/src/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/app.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/models/index.ts:
--------------------------------------------------------------------------------
1 | export * from './user';
2 |
--------------------------------------------------------------------------------
/src/app/components/componentito/componentito.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/components/componentito2/componentito2.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/services/index.ts:
--------------------------------------------------------------------------------
1 | export * from './example.service';
2 |
--------------------------------------------------------------------------------
/src/app/models/user.ts:
--------------------------------------------------------------------------------
1 | export interface User {
2 | name: string;
3 | }
4 |
--------------------------------------------------------------------------------
/src/app/components/componentito/index.ts:
--------------------------------------------------------------------------------
1 | export * from './componentito.component';
2 |
--------------------------------------------------------------------------------
/src/app/components/componentito2/index.ts:
--------------------------------------------------------------------------------
1 | export * from './componentito2.component';
2 |
--------------------------------------------------------------------------------
/src/app/components/index.ts:
--------------------------------------------------------------------------------
1 | export * from './componentito';
2 | export * from './componentito2';
3 |
--------------------------------------------------------------------------------
/src/styles.scss:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
--------------------------------------------------------------------------------
/src/app/app.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 |
3 | export const routes: Routes = [];
4 |
--------------------------------------------------------------------------------
/src/app/directives/index.ts:
--------------------------------------------------------------------------------
1 | export * from './highlight.directive';
2 | export * from './unless.directive';
3 |
--------------------------------------------------------------------------------
/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gentleman-Programming/Angular-Desde-0-Avanzado/HEAD/src/favicon.ico
--------------------------------------------------------------------------------
/src/app/components/componentito2/componentito2.component.html:
--------------------------------------------------------------------------------
1 |
componentito2 works!
2 | {{ ($userSubject | async)?.name }}
3 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846
3 | "recommendations": ["angular.ng-template"]
4 | }
5 |
--------------------------------------------------------------------------------
/src/app/components/componentito/componentito.component.html:
--------------------------------------------------------------------------------
1 | {{ message }}
2 |
3 | Set new User Name
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/app/app.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './app.routes';
5 |
6 | export const appConfig: ApplicationConfig = {
7 | providers: [provideRouter(routes) ]
8 | };
9 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { bootstrapApplication } from '@angular/platform-browser';
2 | import { appConfig } from './app/app.config';
3 | import { AppComponent } from './app/app.component';
4 |
5 | bootstrapApplication(AppComponent, appConfig)
6 | .catch((err) => console.error(err));
7 |
--------------------------------------------------------------------------------
/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/app",
6 | "types": []
7 | },
8 | "files": [
9 | "src/main.ts"
10 | ],
11 | "include": [
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/spec",
6 | "types": [
7 | "jasmine"
8 | ]
9 | },
10 | "include": [
11 | "src/**/*.spec.ts",
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 |
14 | [*.md]
15 | max_line_length = off
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Angular0
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/app/services/example.service.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 |
3 | import { ExampleServiceService } from './example-service.service';
4 |
5 | describe('ExampleServiceService', () => {
6 | let service: ExampleServiceService;
7 |
8 | beforeEach(() => {
9 | TestBed.configureTestingModule({});
10 | service = TestBed.inject(ExampleServiceService);
11 | });
12 |
13 | it('should be created', () => {
14 | expect(service).toBeTruthy();
15 | });
16 | });
17 |
--------------------------------------------------------------------------------
/src/app/directives/highlight.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, ElementRef, HostListener } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[appHighlight]',
5 | standalone: true,
6 | })
7 | export class HighlightDirective {
8 | constructor(private el: ElementRef) {}
9 |
10 | @HostListener('mouseenter') onMouseEnter() {
11 | this.el.nativeElement.style.backgroundColor = 'yellow';
12 | }
13 |
14 | @HostListener('mouseleave') onMouseLeave() {
15 | this.el.nativeElement.style.backgroundColor = '';
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
3 | "version": "0.2.0",
4 | "configurations": [
5 | {
6 | "name": "ng serve",
7 | "type": "chrome",
8 | "request": "launch",
9 | "preLaunchTask": "npm: start",
10 | "url": "http://localhost:4200/"
11 | },
12 | {
13 | "name": "ng test",
14 | "type": "chrome",
15 | "request": "launch",
16 | "preLaunchTask": "npm: test",
17 | "url": "http://localhost:9876/debug.html"
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/src/app/components/componentito2/componentito2.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, inject } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { ExampleService } from 'src/app/services';
4 | import { User } from 'src/app/models';
5 |
6 | @Component({
7 | selector: 'app-componentito2',
8 | standalone: true,
9 | imports: [CommonModule],
10 | templateUrl: './componentito2.component.html',
11 | styleUrls: ['./componentito2.component.scss'],
12 | })
13 | export class Componentito2Component {
14 | private exampleService: ExampleService = inject(ExampleService);
15 | data: User = { name: '' };
16 | $userSubject = this.exampleService.getUser();
17 | }
18 |
--------------------------------------------------------------------------------
/src/app/components/componentito/componentito.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { ComponentitoComponent } from './componentito.component';
4 |
5 | describe('ComponentitoComponent', () => {
6 | let component: ComponentitoComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(() => {
10 | TestBed.configureTestingModule({
11 | imports: [ComponentitoComponent]
12 | });
13 | fixture = TestBed.createComponent(ComponentitoComponent);
14 | component = fixture.componentInstance;
15 | fixture.detectChanges();
16 | });
17 |
18 | it('should create', () => {
19 | expect(component).toBeTruthy();
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/src/app/directives/unless.directive.ts:
--------------------------------------------------------------------------------
1 | import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
2 |
3 | @Directive({
4 | selector: '[appUnless]',
5 | standalone: true,
6 | })
7 | export class UnlessDirective {
8 | private hasView = false;
9 |
10 | constructor(
11 | private templateRef: TemplateRef,
12 | private viewContainer: ViewContainerRef
13 | ) {}
14 |
15 | @Input() set appUnless(condition: boolean) {
16 | if (!condition && !this.hasView) {
17 | this.viewContainer.createEmbeddedView(this.templateRef);
18 | this.hasView = true;
19 | } else if (condition && this.hasView) {
20 | this.viewContainer.clear();
21 | this.hasView = false;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # Compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | /bazel-out
8 |
9 | # Node
10 | /node_modules
11 | npm-debug.log
12 | yarn-error.log
13 |
14 | # IDEs and editors
15 | .idea/
16 | .project
17 | .classpath
18 | .c9/
19 | *.launch
20 | .settings/
21 | *.sublime-workspace
22 |
23 | # Visual Studio Code
24 | .vscode/*
25 | !.vscode/settings.json
26 | !.vscode/tasks.json
27 | !.vscode/launch.json
28 | !.vscode/extensions.json
29 | .history/*
30 |
31 | # Miscellaneous
32 | /.angular/cache
33 | .sass-cache/
34 | /connect.lock
35 | /coverage
36 | /libpeerconnection.log
37 | testem.log
38 | /typings
39 |
40 | # System files
41 | .DS_Store
42 | Thumbs.db
43 |
--------------------------------------------------------------------------------
/src/app/components/componentito2/componentito2.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Componentito2Component } from './componentito2.component';
4 |
5 | describe('Componentito2Component', () => {
6 | let component: Componentito2Component;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(() => {
10 | TestBed.configureTestingModule({
11 | imports: [Componentito2Component]
12 | });
13 | fixture = TestBed.createComponent(Componentito2Component);
14 | component = fixture.componentInstance;
15 | fixture.detectChanges();
16 | });
17 |
18 | it('should create', () => {
19 | expect(component).toBeTruthy();
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/src/app/services/example.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from '@angular/core';
2 | import { User } from '../models';
3 | import { BehaviorSubject, Observable } from 'rxjs';
4 |
5 | // Singleton
6 | @Injectable({
7 | providedIn: 'root',
8 | })
9 | export class ExampleService {
10 | private $dataSubject = new BehaviorSubject({ name: '' });
11 |
12 | // Observable -> unicast
13 |
14 | // Subject -> multicast
15 |
16 | // BehaviorSubject -> multicast / buffer
17 |
18 | private data: User = { name: 'Alan' };
19 |
20 | getUser(): Observable {
21 | return this.$dataSubject.asObservable();
22 | }
23 |
24 | setUser(user: User): void {
25 | this.data = user;
26 | this.$dataSubject.next(this.data);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/app/components/componentito/componentito.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, EventEmitter, Input, Output, inject } from '@angular/core';
2 | import { NgIf } from '@angular/common';
3 | import { ExampleService } from 'src/app/services';
4 |
5 | @Component({
6 | selector: 'app-componentito',
7 | standalone: true,
8 | imports: [NgIf],
9 | templateUrl: './componentito.component.html',
10 | styleUrls: ['./componentito.component.scss'],
11 | })
12 | export class ComponentitoComponent {
13 | @Input({ required: true }) message = '';
14 | @Output() messageChange = new EventEmitter();
15 |
16 | private exampleService = inject(ExampleService);
17 |
18 | setNewUserData(): void {
19 | this.exampleService.setUser({
20 | name: 'Componentito',
21 | });
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 | import { AppComponent } from './app.component';
3 |
4 | describe('AppComponent', () => {
5 | beforeEach(() => TestBed.configureTestingModule({
6 | imports: [AppComponent]
7 | }));
8 |
9 | it('should create the app', () => {
10 | const fixture = TestBed.createComponent(AppComponent);
11 | const app = fixture.componentInstance;
12 | expect(app).toBeTruthy();
13 | });
14 |
15 | it(`should have the 'Angular0' title`, () => {
16 | const fixture = TestBed.createComponent(AppComponent);
17 | const app = fixture.componentInstance;
18 | expect(app.title).toEqual('Angular0');
19 | });
20 |
21 | it('should render title', () => {
22 | const fixture = TestBed.createComponent(AppComponent);
23 | fixture.detectChanges();
24 | const compiled = fixture.nativeElement as HTMLElement;
25 | expect(compiled.querySelector('.content span')?.textContent).toContain('Angular0 app is running!');
26 | });
27 | });
28 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "compileOnSave": false,
4 | "compilerOptions": {
5 | "baseUrl": "./",
6 | "outDir": "./dist/out-tsc",
7 | "forceConsistentCasingInFileNames": true,
8 | "strict": true,
9 | "noImplicitOverride": true,
10 | "noPropertyAccessFromIndexSignature": true,
11 | "noImplicitReturns": true,
12 | "noFallthroughCasesInSwitch": true,
13 | "sourceMap": true,
14 | "declaration": false,
15 | "downlevelIteration": true,
16 | "experimentalDecorators": true,
17 | "moduleResolution": "node",
18 | "importHelpers": true,
19 | "target": "ES2022",
20 | "module": "ES2022",
21 | "useDefineForClassFields": false,
22 | "lib": [
23 | "ES2022",
24 | "dom"
25 | ]
26 | },
27 | "angularCompilerOptions": {
28 | "enableI18nLegacyMessageIdFormat": false,
29 | "strictInjectionParameters": true,
30 | "strictInputAccessModifiers": true,
31 | "strictTemplates": true
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import {
2 | ChangeDetectionStrategy,
3 | ChangeDetectorRef,
4 | Component,
5 | inject,
6 | } from '@angular/core';
7 | import { CommonModule } from '@angular/common';
8 | import { RouterOutlet } from '@angular/router';
9 | import { ComponentitoComponent, Componentito2Component } from './components';
10 |
11 | @Component({
12 | selector: 'app-root',
13 | standalone: true,
14 | changeDetection: ChangeDetectionStrategy.OnPush,
15 | imports: [
16 | CommonModule,
17 | RouterOutlet,
18 | ComponentitoComponent,
19 | Componentito2Component,
20 | ],
21 | templateUrl: './app.component.html',
22 | styleUrls: ['./app.component.scss'],
23 | })
24 | export class AppComponent {
25 | message = 'from app component';
26 | showComponentito2 = false;
27 | cd = inject(ChangeDetectorRef);
28 |
29 | constructor() {
30 | setTimeout(() => {
31 | this.showComponentito2 = true;
32 | this.cd.detectChanges();
33 | }, 4000);
34 | }
35 | handleClick() {
36 | this.message = 'clicked at the app component';
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558
3 | "version": "2.0.0",
4 | "tasks": [
5 | {
6 | "type": "npm",
7 | "script": "start",
8 | "isBackground": true,
9 | "problemMatcher": {
10 | "owner": "typescript",
11 | "pattern": "$tsc",
12 | "background": {
13 | "activeOnStart": true,
14 | "beginsPattern": {
15 | "regexp": "(.*?)"
16 | },
17 | "endsPattern": {
18 | "regexp": "bundle generation complete"
19 | }
20 | }
21 | }
22 | },
23 | {
24 | "type": "npm",
25 | "script": "test",
26 | "isBackground": true,
27 | "problemMatcher": {
28 | "owner": "typescript",
29 | "pattern": "$tsc",
30 | "background": {
31 | "activeOnStart": true,
32 | "beginsPattern": {
33 | "regexp": "(.*?)"
34 | },
35 | "endsPattern": {
36 | "regexp": "bundle generation complete"
37 | }
38 | }
39 | }
40 | }
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular0",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "build": "ng build",
8 | "watch": "ng build --watch --configuration development",
9 | "test": "ng test"
10 | },
11 | "private": true,
12 | "dependencies": {
13 | "@angular/animations": "^17.0.0-next.4",
14 | "@angular/common": "^17.0.0-next.4",
15 | "@angular/compiler": "^17.0.0-next.4",
16 | "@angular/core": "^17.0.0-next.4",
17 | "@angular/forms": "^17.0.0-next.4",
18 | "@angular/platform-browser": "^17.0.0-next.4",
19 | "@angular/platform-browser-dynamic": "^17.0.0-next.4",
20 | "@angular/router": "^17.0.0-next.4",
21 | "rxjs": "~7.8.0",
22 | "tslib": "^2.3.0",
23 | "zone.js": "~0.13.0"
24 | },
25 | "devDependencies": {
26 | "@angular-devkit/build-angular": "^17.0.0-next.4",
27 | "@angular/cli": "~17.0.0-next.4",
28 | "@angular/compiler-cli": "^17.0.0-next.4",
29 | "@types/jasmine": "~4.3.0",
30 | "jasmine-core": "~4.6.0",
31 | "karma": "~6.4.0",
32 | "karma-chrome-launcher": "~3.2.0",
33 | "karma-coverage": "~2.2.0",
34 | "karma-jasmine": "~5.1.0",
35 | "karma-jasmine-html-reporter": "~2.1.0",
36 | "typescript": "~5.1.3"
37 | }
38 | }
--------------------------------------------------------------------------------
/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 | Click
3 | {{ message }}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Style
14 | Class
15 |
16 |
17 | Me renderice
18 |
19 |
22 | {{ item.name + i }}
23 |
24 |
25 |
26 |
27 | condition: {{ condition }}
28 | I'm rendered
29 |
30 |
31 |
32 | Soy el uno
33 | Soy el dos
34 |
35 |
36 |
37 |
38 |
39 |
40 |
43 | {{ item.name + i }}
44 |
45 |
46 |
47 |
48 |
49 | Dom
50 | Esto es un template
51 |
52 |
53 |
54 | Me renderice
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "Angular0": {
7 | "projectType": "application",
8 | "schematics": {
9 | "@schematics/angular:component": {
10 | "style": "scss",
11 | "standalone": true
12 | },
13 | "@schematics/angular:directive": {
14 | "standalone": true
15 | },
16 | "@schematics/angular:pipe": {
17 | "standalone": true
18 | }
19 | },
20 | "root": "",
21 | "sourceRoot": "src",
22 | "prefix": "app",
23 | "architect": {
24 | "build": {
25 | "builder": "@angular-devkit/build-angular:browser",
26 | "options": {
27 | "outputPath": "dist/angular0",
28 | "index": "src/index.html",
29 | "main": "src/main.ts",
30 | "polyfills": [
31 | "zone.js"
32 | ],
33 | "tsConfig": "tsconfig.app.json",
34 | "inlineStyleLanguage": "scss",
35 | "assets": [
36 | "src/favicon.ico",
37 | "src/assets"
38 | ],
39 | "styles": [
40 | "src/styles.scss"
41 | ],
42 | "scripts": []
43 | },
44 | "configurations": {
45 | "production": {
46 | "budgets": [
47 | {
48 | "type": "initial",
49 | "maximumWarning": "500kb",
50 | "maximumError": "1mb"
51 | },
52 | {
53 | "type": "anyComponentStyle",
54 | "maximumWarning": "2kb",
55 | "maximumError": "4kb"
56 | }
57 | ],
58 | "outputHashing": "all"
59 | },
60 | "development": {
61 | "buildOptimizer": false,
62 | "optimization": false,
63 | "vendorChunk": true,
64 | "extractLicenses": false,
65 | "sourceMap": true,
66 | "namedChunks": true
67 | }
68 | },
69 | "defaultConfiguration": "production"
70 | },
71 | "serve": {
72 | "builder": "@angular-devkit/build-angular:dev-server",
73 | "configurations": {
74 | "production": {
75 | "browserTarget": "Angular0:build:production"
76 | },
77 | "development": {
78 | "browserTarget": "Angular0:build:development"
79 | }
80 | },
81 | "defaultConfiguration": "development"
82 | },
83 | "extract-i18n": {
84 | "builder": "@angular-devkit/build-angular:extract-i18n",
85 | "options": {
86 | "browserTarget": "Angular0:build"
87 | }
88 | },
89 | "test": {
90 | "builder": "@angular-devkit/build-angular:karma",
91 | "options": {
92 | "polyfills": [
93 | "zone.js",
94 | "zone.js/testing"
95 | ],
96 | "tsConfig": "tsconfig.spec.json",
97 | "inlineStyleLanguage": "scss",
98 | "assets": [
99 | "src/favicon.ico",
100 | "src/assets"
101 | ],
102 | "styles": [
103 | "src/styles.scss"
104 | ],
105 | "scripts": []
106 | }
107 | }
108 | }
109 | }
110 | },
111 | "cli": {
112 | "analytics": false
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Repositorio Avanzado de Aprendizaje de Angular - Gentleman Programming
2 |
3 | ¡Bienvenidos al repositorio oficial de Gentleman Programming dedicado al proyecto de Angular que redefine la forma en que abordamos las clases avanzadas! Aquí, sumérgete en un viaje de aprendizaje profundo y exhaustivo, donde exploramos los conceptos de React desde los cimientos hasta niveles inexplorados.
4 |
5 | ## ¿Qué hace a este repositorio especial?
6 |
7 | - **Contenido Profundo:** Este proyecto de Angular no es solo otro tutorial superficial. Hemos desglosado los conceptos avanzados en bloques sólidos de conocimiento, abordando cada tema con ejemplos claros y aplicaciones prácticas.
8 |
9 | - **Exploración Exhaustiva:** Desde el enrutamiento reactivo hasta la gestión de estado avanzada, pasando por render props, hooks personalizados y más. Aquí, desentrañamos cada aspecto de Angular con una perspectiva holística y profunda.
10 |
11 | - **Aprendizaje Activo:** No te limites a copiar y pegar código. En este repositorio, te alentamos a interactuar con los ejemplos, experimentar con variantes y aplicar lo aprendido en proyectos personales. El aprendizaje es un proceso activo, y aquí lo vivirás en cada línea de código.
12 |
13 | - **Proyecto Práctico:** Acompaña tu aprendizaje con un proyecto práctico que une todos los conceptos explorados. Construye desde cero una aplicación dinámica, aplicando técnicas avanzadas para crear una experiencia de usuario fluida y eficiente.
14 |
15 | - **Recursos Adicionales:** Junto con el código del proyecto, encontrarás recursos adicionales, lecturas recomendadas y enlaces a fuentes relevantes. Queremos que te conviertas en un experto en Angular, y eso implica proporcionarte todas las herramientas necesarias.
16 |
17 | - **Comunidad Activa:** Únete a la comunidad de Gentleman Programming en línea para discutir conceptos, hacer preguntas, compartir tus logros y colaborar en el aprendizaje mutuo. Estamos aquí para apoyarte en cada paso.
18 |
19 | ¿Estás listo para llevar tus habilidades de Angular más allá de lo convencional? Claro, puedes encontrar tutoriales en todas partes, pero aquí en Gentleman Programming, te desafiamos a sumergirte en el núcleo mismo de React y dominar sus aspectos avanzados como nunca antes. ¡Únete a nosotros y déjate llevar por este emocionante viaje de aprendizaje!
20 |
21 | 🌐 ¡Explora más en el siguiente [link](https://linktr.ee/gentlemanprogramming)
22 |
23 | Lista de reproducción del curso en YouTube: [link](https://www.youtube.com/playlist?list=PL42UNLc8e48RINrNGumxAKulG5CWgs_yv)
24 |
25 | ## Datos de compilación
26 |
27 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.0.
28 |
29 | ## Development server
30 |
31 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
32 |
33 | ## Code scaffolding
34 |
35 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
36 |
37 | ## Build
38 |
39 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
40 |
41 | ## Running unit tests
42 |
43 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
44 |
45 | ## Running end-to-end tests
46 |
47 | Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
48 |
49 | ## Further help
50 |
51 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
52 |
--------------------------------------------------------------------------------