标签: angular5

使用Angular CLI在运行时Angular 5加载区域设置

Angular 5提供了一种使用registerLocaleData在运行时加载i18n语言环境的方法

https://angular.io/guide/i18n#i18n-pipes

我想根据设置动态地加载语言环境(例如存储在localStorage中)。我的第一个测试是加载单个语言环境(fr):

import(`@angular/common/locales/fr`).then(locale => {
    registerLocaleData(locale.default);
});
Run Code Online (Sandbox Code Playgroud)

这很好。

根据存储在localStorage中的值进行加载时,如下所示:

const localeName = localStorage.getItem('locale') || 'en';

import(`@angular/common/locales/${localeName}`).then(locale => {
    registerLocaleData(locale.default);
});
Run Code Online (Sandbox Code Playgroud)

它也有效,并且语言环境已成功加载。当使用Angular CLI建立项目时,由于在构建时它不知道要捆绑哪个语言环境,因此将它们全部捆绑在一起,这很好。唯一的问题是,构建过程会针对它加载的每个语言环境发出警告:

模块构建失败:错误:node_modules \ @angular \ common \ locales \ af-NA.d.ts不属于编译输出的一部分。请检查其他错误消息以获取详细信息。

./node_modules/@angular/common/locales/af-NA.js.map中的警告模块解析失败:意外的令牌(1:10)您可能需要适当的加载程序来处理此文件类型。

我已经尝试过包括语言环境* .ts文件,并排除* .map文件,但是似乎没有选择它们。

这是我的tsconfig.app.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "esnext",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts",
    "../node_modules/@angular/common/locales/**/*.map"
  ],
  "include": [
    "**/*",
    "../node_modules/@angular/common/locales/**/*.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)

TypeScript需要使用esnext作为模块才能进行动态导入。使用es2015不能正常工作

localization typescript angular-cli angular angular5

6
推荐指数
1
解决办法
3709
查看次数

Angular 5:允许在路径中使用尾随斜杠

我正在使用Angular更新一个旧网站,我必须满足的一个要求是所有路由都应该保持原样(出于搜索引擎优化的目的).

很多老网站的路线完成以斜杠(像/my/route/),其中一些完成了.html,像/my/route.html.

问题是routerLink删除了每个路由中的最后一个斜线(斜线是我的路线/my/route).

如何routerLink保持尾随斜线?

这里可以看到一个很好的例子:AngularTrailingSlash.

routing angular angular5

6
推荐指数
1
解决办法
4508
查看次数

Angular 5与路由器中的Angular cli非延迟加载模块

构建angular5应用程序.该应用程序需要一些备用布局.

我的方法是处理主app模块路由文件中的高级路由.所述文件将路由映射到模块.对于非必要的速度驱动页面,模块将延迟加载,而不是为速度关键页面延迟加载:

app-layout-router.module.ts 文件:

import {NgModule} from '@angular/core';
import {PreloadAllModules, RouterModule, Routes} from '@angular/router';
import {PublicLayoutModule} from '@modules/layouts/public/public-layout.module';
import {AuthenticatedLayoutModule} from '@modules/layouts/authenticated/authenticated-layout.module';

const routes: Routes = [{
    path: '',
    loadChildren: () => PublicLayoutModule,
},{
    path: 'dashboard',
    loadChildren: () => AuthenticatedLayoutModule,
}];

@NgModule({
    imports: [RouterModule.forRoot(
        routes,
        {
            useHash: false,
            preloadingStrategy: PreloadAllModules
        }
    )],
    exports: [RouterModule],
})

export class AppLayoutRouter {
}
Run Code Online (Sandbox Code Playgroud)

不在仪表板下的所有路线都将根据SEO原因进行预渲染.但是,在经过身份验证的布局中,我可以选择通过延迟加载后续模块来中断应用程序.例如,这是经过身份验证的模块路由器文件的内容:

import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {AuthenticatedLayoutComponent} from './authenticated-layout.component';

const routes: Routes = [{
    path: …
Run Code Online (Sandbox Code Playgroud)

javascript lazy-loading angular angular5

6
推荐指数
1
解决办法
5119
查看次数

在Angular 5数据表中出现错误:无法重新初始化数据表

我正在从事基于角度的项目。我正在使用数据表来显示数据。当我尝试在表上进行一些修改时,出现以下错误。

DataTables警告:表ID = DataTables_Table_0-无法重新初始化DataTable。有关此错误的更多信息,请参见http://datatables.net/tn/3

datatables angular5

6
推荐指数
2
解决办法
5691
查看次数

Angular Universal在每个页面的页面源代码中呈现主页html

我的角度通用项目中有多个组件。当我从home组件路由到其他组件时,我只会在页面源中获取home组件的内容。路由组件未更新它。

我已经通过服务器端的console.log检查了是否每个组件都在服务器端呈现,但是它只是加载主页,其他组件没有在服务器端呈现。

我使用npm run build:ssr进行构建,使用npm run serve:ssr进行服务器端服务。

在cmd或浏览器控制台中运行上述命令时,也没有错误。

有人可以帮忙吗?我在这个问题上停留了大约一个星期。

如果您需要有关该项目的其他信息,请告诉我。

Package.json

"dependencies": {
    "@agm/core": "^1.0.0-beta.2",
    "@angular/animations": "^5.2.0",
    "@angular/common": "^5.2.0",
    "@angular/compiler": "^5.2.0",
    "@angular/core": "^5.2.0",
    "@angular/forms": "^5.2.0",
    "@angular/http": "^5.2.0",
    "@angular/platform-browser": "^5.2.0",
    "@angular/platform-browser-dynamic": "^5.2.0",
    "@angular/platform-server": "^5.2.8",
    "@angular/router": "^5.2.0",
    "@ngu/carousel": "^1.4.8",
    "@nguniversal/express-engine": "^5.0.0-beta.6",
    "@nguniversal/module-map-ngfactory-loader": "^5.0.0-beta.6",
    "bootstrap": "^3.3.7",
    "core-js": "^2.4.1",
    "hammerjs": "^2.0.8",
    "ng2-nouislider": "^1.7.7",
    "ngx-bootstrap": "^2.0.0-beta.8",
    "nouislider": "^11.0.3",
    "reflect-metadata": "^0.1.12",
    "rxjs": "^5.5.6",
    "ts-loader": "^3.5.0",
    "zone.js": "^0.8.19"
  },
  "devDependencies": {
    "@angular/cli": "~1.7.3",
    "@angular/compiler-cli": "^5.2.0",
    "@angular/language-service": "^5.2.0",
    "@types/jasmine": "~2.8.3",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60", …
Run Code Online (Sandbox Code Playgroud)

node.js express angular-universal angular angular5

6
推荐指数
1
解决办法
1099
查看次数

Angular 5是否仅对模糊进行验证?

我想知道是否有可能以模糊的反应形式进行验证。目前,您可以进行设置,updateOn: "blur"但是输入字段的值不会在输入时更新。在我的情况下,我需要在每次击键时更新值,因为我会用它进行计算并将结果显示给用户。验证应仅在模糊时进行。

谢谢。

编辑:

我使用FormBuilder,一些内置的验证器和一些自定义的验证器。示例代码:

let formToMake = {
  purpose: [null, Validators.required],
  registrationDate: this.fb.group({
    day: [null, Validators.required],
    month: [null, Validators.required],
    year: [null, Validators.required]
  }),
  isTruth: [null, Validators.compose([checkIfTrue, Validators.required])]
};
Run Code Online (Sandbox Code Playgroud)

如果我要使用模糊事件,则需要手动进行所有验证,但我认为这不是一个好方法。

javascript angular-validation angular angular5

6
推荐指数
1
解决办法
9348
查看次数

我怎样才能获得所有行的ag-grid?

ag-grid提供了一种使用api.getSelectedRows()函数获取选定行的方法。并提供一种使用api.setRowData([])功能设置所有行的方法。我正在寻找某种东西getAllRows()来返回网格中的所有行。我知道有一种方法可以使用api.forEachNode()etc 遍历所有行。有什么办法可以获取整个行数组?

ag-grid angular5

6
推荐指数
4
解决办法
9653
查看次数

带按钮的Ag-Grid cellRender单击

我正在使用带有ag-grid数据表的角度5,我无法使用cellRenderer从单元格触发点击事件,这里如何使用我的ag-grid-> colDefs

this.columnDefs = [
            {headerName: '#', rowDrag: true, width: 75},
            {headerName: 'One', field: 'fieldName',
                cellRenderer : function(params){
                    return '<div><button (click)="drop()">Click</button></div>'
                }
            }
];

drop() {
    alert("BUTTON CLICKEFD")
}
Run Code Online (Sandbox Code Playgroud)

如果正在使用 onClick="alert("123")" ->它有效,但是我无法使用onClick="drop()"它会抛出未定义的信息,

我也在cellRenderer内部尝试过-> params = params.$scope.drop = this.drop;

如果在使用gridOptions angularCompileRows : true时抛出错误,Cannot read property '$apply' of undefined. 是否需要安装ag-grid enterprise

javascript typescript ag-grid ag-grid-ng2 angular5

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

如何延迟主题的下一个(值)?

我的AlertService有 private subject = new Subject<Alert>();。我想在5秒钟后专心清除警报。我可以这样使用setTimeout()

autoClear(alertId?: string) {
   setTimeout(
      () => this.subject.next(new Alert({alertId})),
   5000);
  }
Run Code Online (Sandbox Code Playgroud)

我尝试使它更优雅,并创建了以下代码:

autoClear(alertId?: string) {
    const delay = new Observable(x => {
      x.next();
    }).delay(5000).subscribe(() => {
      this.subject.next(new Alert({alertId}));
      delay.unsubscribe();
    });
  }
Run Code Online (Sandbox Code Playgroud)

这两个示例都可以工作,但看起来不像是使用RxJS的正确方法。我该如何改善?

subject rxjs rxjs5 angular angular5

6
推荐指数
1
解决办法
2007
查看次数

单击关闭Angular 5中的Angular2-通知时发生ViewDestroyedError

我单击关闭通知时收到此错误,它似乎是随机发生的。

zone.js:196未捕获的错误:ViewDestroyedError:尝试使用被破坏的视图:在checkAndUpdateView(core.js:13508)在Object.debugUpdateDirectives [作为updateDirectives](core.js:14336)的viewDestroyedError(core.js:9540)的detectChanges ),位于Object.debugCheckAndUpdateView的callWithDebugContext(core.js:14740)[以checkRef.webpackJsonp ../ node_modules/@angular/core/esm5/core.js.ViewRef_.detectChanges(core的checkAndUpdateView](core.js:14277) .js:11300),位于Angular2-notifications.umd.js:531,位于ZoneDelegate.webpackJsonp ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invoke(zone.js:392),位于Object.onInvoke(核心.js:4629)在ZoneDelegate.webpackJsonp ../ node_modules / zone.js / dist / zone.js.ZoneDelegate.invoke(zone.js:391)

此错误在我的应用程序中多次(appx 1667次)命中,因为它执行更改检测生命周期挂钩。

如果有人有想法解决此问题,请帮助我解决这个问题。

Angular2-通知

angular angular5

6
推荐指数
1
解决办法
77
查看次数