标签: angular-module

如何编写可重用的组件/模块?

我现在正在写两个新网站.两者都有很多功能.是否可以使用angular来编写小组件/模块并在其他应用程序中重用它们?它的项目结构是什么,或者我可以使用ng-cli的结构?

reusability angular-module angular-cli angular-components angular

5
推荐指数
1
解决办法
663
查看次数

为Angular的子模块定制RouteReuseStrategy

我想将这个自定义路由重用策略用于一个模块:

export class CustomRouteReuseStrategy extends RouteReuseStrategy {
    public shouldDetach(route: ActivatedRouteSnapshot): boolean { return false; }
    public store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle): void {}
    public shouldAttach(route: ActivatedRouteSnapshot): boolean { return false; }
    public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { return null; }
    public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我在我的一个名为的模块中传入@NgModule()ChildModule:

providers: [
        {
            provide: RouteReuseStrategy,
            useClass: CustomRouteReuseStrategy
        }
]
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我在那里传递它时,它会被忽略.虽然添加到我的根目录时工作正常AppModule...我不确定它是否重要,但是ChildModule懒得加载.怎么解决?

angular-routing angular-module angular angular-router

5
推荐指数
2
解决办法
6018
查看次数

Angular 6:功能模块之间的共享组件不起作用

我创建了2个功能模块(PagesSharedModule&HomeModule).
现在,我正在尝试使用组件PagesSharedModule模板内部的导出组件,HomeModule我收到此错误:

ERROR Error: Uncaught (in promise): Error: Template parse errors: 'app-main-menu' is not a known element:
1. If 'app-main-menu' is an Angular component, then verify that it is part of this module.
2. If 'app-main-menu' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. ("[ERROR
->]<app-main-menu></app-main-menu>"): ng:///HomeModule/HomeComponent.html@0:0 Error: Template parse errors: 'app-main-menu' is not a known element:
1. If 'app-main-menu' is an Angular …
Run Code Online (Sandbox Code Playgroud)

typescript angular-module angular-components angular angular6

5
推荐指数
1
解决办法
4340
查看次数

Angular:从惰性功能模块添加多提供者

我有一个 ErrorModule (eager) 配置如下:

export const CONFIG = new InjectionToken<ErrorConfig[]>('Module errors configuration.');


@NgModule({
  imports: [... ]
})
export class ErrorModule {
  static forRoot(config: ErrorConfig): ModuleWithProviders {
    return {
      ngModule: ErrorModule,
      providers: [
        ErrorService,
        { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },
        { provide: CONFIG, useValue: config, multi: true }
      ]
    };
  }

  static forChild(config: ErrorConfig): ModuleWithProviders {
    return {
      ngModule: ErrorModule,
      providers: [
        { provide: CONFIG, useValue: config, multi: true }
      ]
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

然后导入核心模块ErrorModule如下:

@NgModule({
  imports: …
Run Code Online (Sandbox Code Playgroud)

typescript angular-module angular

5
推荐指数
1
解决办法
1279
查看次数

Angular 库模块从模块导出组件、服务等

我创建了一个 Angular 库。在我的库中,我希望通过在其中包含功能模块来使其变得干净:

例子:

Library
  NavigationModule
    NavigationSideBarComponent
    NavigationTopComponent
    Navigation Service
    etc

  GraphModule
    BarGraphComponent
    PieGraphComponent
Run Code Online (Sandbox Code Playgroud)

我的导航模块目前如下所示:

@NgModule({
  declarations: [
    NavigationSidebarComponent
  ],
  imports: [
    CommonModule,
    MatSidenavModule
  ],
  exports: [
    NavigationSidebarComponent
  ]
})
export class NavigationModule { }
Run Code Online (Sandbox Code Playgroud)

我的图书馆模块目前如下所示:

@NgModule({
  declarations: [LibraryComponent],
    imports: [
      NavigationModule
    ],
    exports: [
      LibraryComponent
      //NavigationSidebarComponent  <-- Did not work
    ]
 })
 export class LibraryModule { }
Run Code Online (Sandbox Code Playgroud)

我发现的大多数教程都使用一个仅包含组件的库,而没有其他内容,例如模块。我发现使用库中的模块的教程没有显示如何导出片段。

本质上,我想将此库导入到任何应用程序中,并能够NavigationSidebarComponent从库或服务中的模块调用或任何其他组件。

我将继续调查此事。

import export angular-module angular angular-library

5
推荐指数
2
解决办法
1万
查看次数

如何定义 Angular 内部服务并使其不可注入到其模块之外?

是否有办法防止服务被注入到其原始模块之外?

假设我们正在projects.module.ts延迟加载并ProjectsModule导入ProjectsStoreModule. 我定义了一个服务ProjectsStoreModule,我不想将其注入到 中ProjectsModule,但可以将其注入到 中的任何位置ProjectsStoreModule。我想知道是否有办法实现这一目标?

注意: ProjectsStoreModule没有任何组件,因此我无法向组件提供服务。我想要隔离的服务将被注入到 Ngrx Effect 中,这是一个服务。

我做了什么:

我注册了ProjectsService

@Injectable({
    providedIn: ProjectsStoreModule
})
export class ProjectsService {
    ...
}
Run Code Online (Sandbox Code Playgroud)

项目模块:

@NgModule({
    ...
})
export class ProjectsModule {
    ...
    imports: [ProjectsStoreModule] 
}
Run Code Online (Sandbox Code Playgroud)

这种做法显然引起了如此多的Circular dependency警告。

ProjectsService然后我尝试在装饰器中注册@NgModule

@NgModule({
    ...
    providers: [ProjectsService]
})
export class ProjectsStoreModule {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,通过将 导入ProjectsStoreModule到 中ProjectsModule,我想要成为内部服务的服务将在 中可用ProjectsModule

任何帮助将不胜感激。

dependency-injection lazy-loading angular-services angular-module angular

5
推荐指数
1
解决办法
1449
查看次数

如何通过 Angular mdule 联合访问共享资源?

我正在使用 Angular 14 和模块联合。在我的远程应用程序中,我有这个文件结构

- package.json
- webpack.config.js
+ src
    - settings.json
    + app
        + services
            - app.service.ts
Run Code Online (Sandbox Code Playgroud)

在我的 app.service.ts 文件中,我访问一个静态 JSON 文件,如下所示

@Injectable({
  providedIn: 'root'
})
export class AppService {
    ...
     public init() {
        const request = new XMLHttpRequest();
        request.open('GET', this.configUrl, false);
        request.send(null);
        ...
    }
Run Code Online (Sandbox Code Playgroud)

在我的 webpack.config.js 文件中,我尝试像这样公开我的模块和文件

module.exports = withModuleFederationPlugin({

  name: 'productlist',

  exposes: {
    './Component': './src/app/app.component.ts',
    './dashboard':'./src/app/my-product-list/my-product-list.module.ts'
  },

  shared: {
    '.settings.json': {
      singleton: true,
      eager: true,
      import: './src/settings.json',
      requiredVersion: 'auto',
    },
    ...shareAll({ singleton: true, strictVersion: true, requiredVersion: 'auto' …
Run Code Online (Sandbox Code Playgroud)

angular-module angular nrwl-nx angular-module-federation angular14

5
推荐指数
0
解决办法
669
查看次数

在子模块中使用来自导入模块的组件

我有一个导出组件以将其公开给其他模块的模块,我想在作为另一个模块的子模块的模块中使用此组件,我正在导入父模块中的第一个模块以启用子模块内部但是,我我并不完全相信这是最好的方法。

这是我在根文件夹中的共享模块,其中包含我要使用的组件:

应用程序/共享/shared.module.ts

import {dtComponent} from './dt.component';

@NgModule({
  imports: [
    CommonModule
  ],
  exports: [
    dtComponent
  ],
  declarations: [
    dtComponent
  ]
})
export class DatePModule{ }
Run Code Online (Sandbox Code Playgroud)

我在 app 文件夹中有另一个模块,它像这样导入DatePModule

应用程序/联系人/contacts.module.ts

import {DatePModule} from '../shared/shared.module.ts';

@NgModule({
  imports: [
    CommonModule,
    DatePModule
  ]
})
export class CTModule{ }
Run Code Online (Sandbox Code Playgroud)

我需要使用dtComponent直接的一些组件CTModule,还需要在在的子模块等组件此组件CTModule

我可以在CTModule的子模块中再次导入DatePModule,但我不相信这是最好的方法。

应用程序/联系人/其他/other.module.ts

import {DatePModule} from '../../shared/shared.module.ts';

@NgModule({
  imports: [
    CommonModule,
    DatePModule
  ]
})
export class OtherModule{ }
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果DatePModule已经导入到父模块中,为什么我需要再次导入?如果我在OtherModule 中删除此导入,则组件 …

angular-module angular-components angular

4
推荐指数
1
解决办法
7146
查看次数

在 Angular 模块中导出枚举

有谁知道是否可以在 Angular 模块中导出枚举?如果没有,是否有在 Angular 模块中传送枚举的最佳实践?

// not working example
// i dont know how to export GreatEnum

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { GreatComponent } from './great.component';
import { GreatEnum } from './great.enum';

@NgModule({
    imports: [
        CommonModule       
    ],
    declarations: [GreatComponent ],
    exports: [GreatComponent ]
})
export class GreatModule {
}
Run Code Online (Sandbox Code Playgroud)

javascript enums angular-module typescript2.0 angular

4
推荐指数
2
解决办法
9712
查看次数

Angular 未在 app.module.ts 中导入模块,但该模块的组件声明中仍会出现错误

我有一个应用程序,我想提取它的两个版本。

首先是包含整个应用程序的构建。

第二个是一个仅包含我的模块之一的应用程序。它还有一个单独的路由模块。

我使用文件替换来分离构建,以定义一种新的构建方式angular.json

替代品是这些:

"fileReplacements": [
  {
    "replace": "projects/my-app/src/environments/environment.ts",
    "with": "projects/my-app/src/environments/environment.prod.ts"
  },
  {
    "replace": "projects/my-app/src/app/app.module.ts",
    "with": "projects/my-app/src/app/app-auth-standalone.module.ts"
  },
  {
    "replace": "projects/my-app/src/app/app-routing.module.ts",
    "with": "projects/my-app/src/app/app-auth-standalone-routing.module.ts"
  },
  {
    "replace": "projects/my-app/src/app/app.component.ts",
    "with": "projects/my-app/src/app/app-auth-standalone.component.ts"
  }
]
Run Code Online (Sandbox Code Playgroud)

现在,当我运行它时,ng run my-app:auth-standalone:production它会出现以下错误:

Error: <some-path>/message-bot.component.html:24:34 - error NG8002: Can't bind to 'control' since it isn't a known property of 'app-bot-view-tr
ansfer-to-user'.
1. If 'app-bot-view-transfer-to-user' is an Angular component and it has 'control' input, then verify that it is part of this module.
2. If …
Run Code Online (Sandbox Code Playgroud)

angular-module angular-cli angular

4
推荐指数
1
解决办法
7万
查看次数