Angular2 Typescript组件加载教程/调试?

时间:2016-02-08 23:40:21

标签: typescript angular

我正在使用Angular-CLI并首次使用ES6模块和导入,而我很难理解它们。我基本上用“ng new Angular2Facebook”然后“ng g component Login”开始了一个新项目。这创造了这种结构:

dist
  app
    components
       login
node_modules
src
  app
    components
      login
        login.ts
   angular2-facebook.ts
app.ts

我终于想出使用组件的相对路径来导入我自己的组件以避免编译错误:

import {Login} from './components/login/login'; // error

由于我不再遇到编译错误,我很确定它是正确的地方,但我的angular2-facebook视图中的<login>没有被模板替换。实际上,生成的login.js没有被执行。如果我转到我的主app.ts文件并导入它,仍然没有。如果我加上这个:

console.dir(new Login());

然后我可以看到文件已加载,因为'导出类“登录”'显示在控制台中,但标签仍未被模板替换。这是Login.ts:

import {Component} from 'angular2/core';

@Component({
    selector: 'login',
    //templateUrl: 'app/components/login/login.html',
    template: '<h1>LOGIN TEMPLATE</h1>',
    styleUrls: ['app/components/login/login.css'],
    providers: [],
    directives: [],
    pipes: []
})
export class Login {
    constructor() {
        console.log("Login constructor()");
    }
}

console.log('exported class "Login"');

并且始终运行的angular2-facebook.ts:

import {Component} from 'angular2/core';
import {Login} from './components/login/login';
import {FacebookTest1} from './components/facebook-test1/facebook-test1';

@Component({
    selector: 'angular2-facebook-app',
    providers: [],
    templateUrl: 'app/angular2-facebook.html',
    directives: [],
    pipes: []
})
export class Angular2FacebookApp {
    defaultMeaning: number = 42;

    meaningOfLife(meaning) {
        return `The meaning of life is ${meaning || this.defaultMeaning}`;
    }
}

console.log('ran angular2-facebook.ts');

而angular2-facebook.html受角度限制,但没有更换facebook-test1标签的登录信息:

<p>
{{meaningOfLife()}} ({{defaultMeaning}})
</p>

<login>Inside login tags</login>

<facebook-test1>Inside facebook-test1 tags</facebook-test1>

我真正想要的是某种教程或书籍,我可以阅读以了解幕后发生了什么,所以我可以自己调试这些东西,我只是不明白为什么它不会使用我的组件。如果我将<login>Loading...</login>放在html页面而不是facebook app组件并引导它,它显示正常:

//bootstrap(Angular2FacebookApp);
bootstrap(Login);

2 个答案:

答案 0 :(得分:2)

Login组件添加到Directives组件中的Angular2FacebookApp列表中。

@Component({
  selector: 'angular2-facebook-app',
  providers: [],
  templateUrl: 'app/angular2-facebook.html',
  directives: [Login],
  pipes: []
})

这告诉angular将<login>标记替换为组件的实例。

如果没有这个角度,则不知道它需要替换此标签。

答案 1 :(得分:1)

Angular2网络https://angular.io/docs/ts/latest/tutorial/toh-pt3.html#的此链接中,您可以看到在directives: [...ClassName]内添加@Components,例如:

import {Component} from 'angular2/core';
import {Login} from './components/login/login';
import {FacebookTest1} from './components/facebook-test1/facebook-test1';

@Component({
    selector: 'angular2-facebook-app',
    providers: [],
    templateUrl: 'app/angular2-facebook.html',
    directives: [Login],
    pipes: []
})
//Rest of code

您可以查看文件名app.appcomponet.ts以获取更多详细信息,希望有所帮助。