• [Angular 14] Inject() function


    Before v14, we do DI like this:

    @Component({
        name: 'app-root',
        template: `<h1>Hello!</h1>`
    })
    export class AppComponent {
        constructor(private http: HttpClient) {
        }
    }

    In V14, we can do:

    @Component({
        name: 'app-root',
        template: `<h1>Hello!</h1>`
    })
    export class AppComponent {
        http = inject(HttpClient);
        auth = inject(AuthService);
        
        ngOnInit() {
            console.log(this.http);
        }
    }

    You can aslo use InjectionToken:

    export cibst AUTH = new InjectionToken('AUTH', {
        providedIn: 'root',
        factory() {
            return inject(AuthService)
        }
    })
    
    @Component({
        name: 'app-root',
        template: `<h1>Hello!</h1>`
    })
    export class AppComponent {
        auth = inject(AUTH);
        
        ngOnInit() {
            console.log(this.auth);
        }
    }

    Use Factory in Providers:

    @Injectable()
    export class AuthService {
        constructor(http: HttpClient) {}
    }
    
    @NgModule({
        ...
        providers: [
            provide: AuthService,
            useFactory: () => {
                return new AuthService(inject(HttpClient))
            }
        ]
    })

    Other usecase:

    //  Before 
    export class AppComponent {
        constructor(private router: Router) {
            this.router.events.pipe(
                filter(e => e instanceof NavigationEnd)
            ).subscribe()
        }
    }
    
    // NOW
    export function getRouterEvent() {
        return inject(Router).events
            .pipe(
                filter(e => e instanceof NavigationEnd)
            )
    }
    
    @Component()
    export class AppComponent {
        routerEvents = getRouterEvent();
        constructor() {
            this.routerEvents.subscribe(console.log)
        }
    }
  • 相关阅读:
    二叉树专题
    强化学习的几个基本概念
    LeetCode #111 二叉树的最小深度
    NC127 最长公共子串
    快速排序
    NC78 反转链表
    《合作的进化》读后总结
    Optional和Stream的map与flatMap
    最爱的小工具,谁用谁知道!
    SpringBoot应用启动过程分析
  • 原文地址:https://www.cnblogs.com/Answer1215/p/16395009.html
Copyright © 2020-2023  润新知