【问题标题】:Angular 2 errors accessing router paramsAngular 2错误访问路由器参数
【发布时间】:2016-08-26 18:27:40
【问题描述】:

访问路由器参数时遇到打字稿错误:

“app.component.ts 属性‘imageUrl’不存在于类型‘{ [name: string]: any}”

我可以正常使用该属性,但该错误导致我的服务器在启动时失败。这是我用来访问 imageUrl 参数的代码:

this.router.events
      .filter(event => event instanceof NavigationEnd)
      .subscribe(_ => {
          let childRouteSnapshot = this.route.firstChild.snapshot;
          let url = childRouteSnapshot.data.imageUrl;

我的路由器参数定义为:

data: {
        imageUrl: '/app/assets/images/image.png',

正如我所说,代码有效,但我不确定打字稿错误是否与我的语法或过时的打字稿参考有关。

这是我的 package.json:

{
  "name": "angular2-quickstart",
  "version": "1.0.0",
  "description": "QuickStart package.json from the documentation, supplemented with testing support",
  "scripts": {
    "start": "tsc && concurrently \"tsc -w\" \"lite-server\" ",
    "docker-build": "docker build -t ng2-quickstart .",
    "docker": "npm run docker-build && docker run -it --rm -p 3000:3000 -p 3001:3001 ng2-quickstart",
    "pree2e": "npm run webdriver:update",
    "e2e": "tsc && concurrently \"http-server -s\" \"protractor protractor.config.js\" --kill-others --success first",
    "lint": "tslint ./app/**/*.ts -t verbose",
    "lite": "lite-server",
    "postinstall": "typings install",
    "test": "tsc && concurrently \"tsc -w\" \"karma start karma.conf.js\"",
    "test-once": "tsc && karma start karma.conf.js --single-run",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings",
    "webdriver:update": "webdriver-manager update"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@angular/common":  "2.0.0-rc.5",
    "@angular/compiler":  "2.0.0-rc.5",
    "@angular/core":  "2.0.0-rc.5",
    "@angular/forms": "0.3.0",
    "@angular/http":  "2.0.0-rc.5",
    "@angular/platform-browser":  "2.0.0-rc.5",
    "@angular/platform-browser-dynamic":  "2.0.0-rc.5",
    "@angular/router":  "3.0.0-rc.1",
    "@angular/router-deprecated":  "2.0.0-rc.2",
    "@angular/upgrade":  "2.0.0-rc.5",

    "systemjs": "0.19.27",
    "core-js": "^2.4.0",
    "reflect-metadata": "^0.1.3",
    "rxjs": "5.0.0-beta.6",
    "zone.js": "^0.6.12",

    "angular2-in-memory-web-api": "0.0.15",
    "bootstrap": "^3.3.6"
  },
  "devDependencies": {
    "concurrently": "^2.2.0",
    "lite-server": "^2.2.0",
    "typescript": "^1.8.10",
    "typings": "^1.0.4",

    "canonical-path": "0.0.2",
    "http-server": "^0.9.0",
    "tslint": "^3.7.4",
    "lodash": "^4.11.1",
    "jasmine-core": "~2.4.1",
    "karma": "^0.13.22",
    "karma-chrome-launcher": "^0.2.3",
    "karma-cli": "^0.1.2",
    "karma-htmlfile-reporter": "^0.2.2",
    "karma-jasmine": "^0.3.8",
    "protractor": "^3.3.0",
    "rimraf": "^2.5.2"
  },
  "repository": {}
}

我应该使用谷歌的快速启动设置以外的其他东西吗?谢谢。

【问题讨论】:

    标签: javascript angular angular2-routing


    【解决方案1】:

    TypeScript 在编译时不知道 data 上的哪些属性。

    您应该改用括号表示法。

    let url = childRouteSnapshot.data["imageUrl"];
    

    【讨论】:

    • 啊,完美。我不会这么想的。效果很好。谢谢你!
    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 2016-02-16
    • 2018-04-12
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多