angularV4+学习笔记

angular学习笔记之组件篇

1注解

1.1组件注解

@Component注解,对组件进行配置。html

1.1.1注解@Component的元数据
  • selector
  • template/templateUrl
  • inputs/outputs
  • host
  • styleUrls

selector:选择器

页面渲染时,Angular组件匹配的选择器,git

使用方式:es6

<ip-address-form></ip-address-form>

采用html标签的方式。
在《Angular权威教程》中,说明另一种,<div ip-address></div>,这种规则与选择器匹配规则一致,也能够为class选择器,根据实际场景而用。(在Ideal中引入TSLint后,程序可以正常运行,可是编辑器会警告,并提示消除警告方案)json

例如:bootstrap

@Component({
  selector: '.app-single-component',
  template: `
  <div>
    这个是子组件 :{{name}}
    <button (click)="sendMessage()" >点我</button>
  </div>
  `
})

templdate/templdateUrl:模版/模版路径

组件具体的html模版,template为模版,templateUrl为模版的路径。
template中支持es6的反引号,进行多行编写,templdateUrl用于配置html模版的路径。数组

注意:在Typescript中的构造函数只容许有一个,这也是它与es6的一个区别app

inputs/output:输入/输出

组件中的输入与输出,能够理解为,数据输入到组件中,数据从组件中输出到父组件中。编辑器

输入使用方式:[变量名],在父元素页面中使用,@Input(),在子组件class中使用,代码例子以下:ide

single-component.component.ts

@Component({
      selector: 'app-single-component',
      template: `
          <div>
            这个是子组件 :{{name}}
          </div>
          `
        })
export class SingleComponentComponent implements OnInit {

  @Input () name: string ;

  ngOnInit () {
  }

}

app.component.ts

@Component({
  selector: 'app-root',
  template: `
    <div>
      <app-single-component [name]="simple"></app-single-component>
  </div>
  `
})
export class AppComponent {
  simple: string;

  constructor () {
    this.simple = '个人世界';
  }
}

其中input做为@Component的元数据,那么还有另一种写法,以后的输出也一致函数

其中一段代码

@Component({
  selector: 'app-single-component',
  inputs:['name'],
  template: `
  <div>
    这个是子组件 :{{name}}
  </div>
  `
})

输出使用方式:输出的方式或许用广播/订阅来讲更加合适。

single-component.component.ts改

@Component({
  selector: 'app-single-component',
  template: `
  <div>
    这个是子组件 :{{name}}
    <button (click)="sendMessage()" >点我</button>
  </div>
  `
})
export class SingleComponentComponent implements OnInit {

  value: string;
  @Input () name: string ;
  @Output() emotter: EventEmitter<string>;

  ngOnInit () {
  }

  constructor () {
    this.value = '来源于组件的值';
    this.emotter = new EventEmitter<string>();
  }

  sendMessage (): void {
    this.emotter.emit(this.value);
  }

}

app.component.ts改

@Component({
  selector: 'app-root',
  template: `
    <div>
      <app-single-component [name]="simple" (emotter)="getComponentData($event)"></app-single-component>
  </div>
  `
})
export class AppComponent {
  simple: string;

  constructor () {
    this.simple = '个人世界';
  }

  getComponentData (message: string): void {
     console.log(`获取到子组件中的值:${message}`);
  }
}

host:用于在元素行配置元素属性

值为json对象key-value,而且做用只作做用于当前组件内部,经常使用来添加class.

styleUrls:层叠样式表url,值位数组,能够传多个。

固然必要的,在须要用到的component的模块中引入:

@NgModule({
  declarations: [
    AppComponent,
    SingleComponentComponent // 引入的指令,放在声明里面
  ],
  imports: [
    BrowserModule // 引入的模块
  ],
  providers: [],
  bootstrap: [AppComponent] //引导应用的根组件
})
export class AppModule { }

关于@component的元数据还未彻底,因此后面会继续完善。

源代码git地址

相关文章
相关标签/搜索