为什么添加构造函数会破坏Angular 2?

时间:2016-03-11 00:52:27

标签: typescript angular

我正在尝试定义一个名为NavItem的TypeScript类,我想要保存标题和网址。我发现如果我定义这个类并使用对象表示法{title: "foo", url: "bar"}实例化它,它可以很好地工作,但是只要我添加一个构造函数(即使我没有立即使用它)它就会完全中断:

import {Component, Input} from 'angular2/core'

@Component({
    selector: 'nav-item',
    templateUrl: './views/navitem.html',
})
export class NavItem {
    @Input() title: String = "default title";
    @Input() url: String;

    // if I comment the following out it works fine:
    constructor(inTitle: String, inUrl: String) {
        this.title = inTitle;
        this.url = inUrl;
    }
}

如果我把构造函数放入,我会在页面中看到它:

  

EXCEPTION:没有String的提供者! ([名称:TopNav @ 2:11]中的navItems中的(NavItem - > String)

2 个答案:

答案 0 :(得分:3)

  

如果我把构造函数放入,我会在页面中看到它:

这是因为 angular 应该实例化控制器给你。你没有new FooController,有角度。因此,任何构造函数参数都必须具有使用angular注册的相应提供程序。

答案 1 :(得分:2)

构造函数用于带组件的DI。如果您想传递title和url的值,您可以执行以下操作。

<nav-item [title]="Sometitle" [url]="http://someurl.com">

Angular将为您提供支持