0

我与提供者有一些困难。我尝试在组件中导入新的自定义提供程序,但它不起作用。第二个提供者基于我制作的第一个提供者,并且效果很好......

这是我的提供者:

import { Injectable} from "@angular/core";
import { Router, Routes } from '@angular/router';

import ... // All components needed

@Injectable()
export class RoutesHelper {

  private userRoutes: Routes = [
      { path: '' , component: HeaderComponent, outlet: 'header' },
      ...
    ];


  constructor(
    private router:Router
    ) {}

    public load() {
      this.router.resetConfig(this.userRoutes);
    }
}

这是我的“问题组件”

import { Component, OnInit } from '@angular/core';
import { RoutesHelper } from '../_utils/routes.helper';

@Component({
  selector: 'questions-list',
  templateUrl: './app/question/questions.component.html',
  providers: [RoutesHelper]
})

export class QuestionsComponent implements OnInit {

  constructor(private routes:RoutesHelper) {}

  ngOnInit() {
    this.routes.load();
  }
}

但我有这个错误:“QuestionsComponent”的无效提供者 - 只允许提供者和类型的实例,得到:[?未定义?]

我不知道为什么我得到“未定义”对象,我也没有这个错误。

谢谢你的帮助。

4

2 回答 2

0

好的问题解决了。

避免由于在组件中导入的提供程序中的导入组件(因此递归导入)而导致的最后一个错误。我用这个:

var userRoutes: Routes = [
    { path: '' , component: LeftComponent, outlet: 'left' },
    { path: '' , component: EmptyComponent, outlet: 'footer' },
    { path: '' , component: HeaderComponent, outlet: 'header' }
];

var all = userRoutes.concat(this.router.config);
this.router.resetConfig(all);

其中 userRoutes 仅包含我想要覆盖的插座并且它可以工作。

于 2016-12-13T20:15:57.330 回答
0

在 app.module.ts 文件中导入提供者的链接。

从“给出你的路径”导入 { RoutesHelper };

在 app.module.ts 提供者列表中包含提供者类名称。

providers: [RoutesHelper, //你的其他提供者...],

在您的 QuestionComponent 中,只需导入 RoutesHelper 链接即可。无需定义提供者。

于 2016-12-13T07:17:15.647 回答