angular创建组件、数据绑定

组件

创建

ng g component components/header

使用组件

<app-header></app-header>
import { Component, OnInit } from '@angular/core'; /*引入 angular 核心*/ @Component({ 
selector: 'app-header', /*使用这个组件的名称*/
templateUrl: './header.component.html', /*html 模板*/ 
styleUrls: ['./header.component.css'] /*css 样式*/ 
})
export class HeaderComponent implements OnInit { /*实现接口*/ 
constructor() { 
/*构造函数*/ 
}
ngOnInit() { /*初始化加载的生命周期函数*/ } }

绑定数据

Angular 中使用{{}}绑定业务逻辑里面定义的数据

<h1>{{title}} </h1>
<div>1+1={{1+1}} </div>

绑定html

this.h="<h2>这是一个 h2 用[innerHTML]来解析</h2>"
<div [innerHTML]="h"></div>

绑定属性

<div [id]="id" [title]="msg">调试工具看看我的属性</div>

数据循环

*ngFor 普通循环
<ul><li *ngFor="let item of list"> {{item}} </li> </ul>
//循环的时候设置 key
<ul><li *ngFor="let item of list;let i = index;"> {{item}} --{{i}} </li> </ul>
//template 循环数据
<ul><li template="ngFor let item of list"> {{item}} </li> </ul>

条件判断 *ngIf

<p *ngIf="list.length > 3">这是 ngIF 判断是否显示</p>
<p template="ngIf list.length > 3">这是 ngIF 判断是否显示</p>

*ngSwitch

<ul [ngSwitch]="score"> 
<li *ngSwitchCase="1">已支付</li> 
<li *ngSwitchCase="2">订单已经确认</li> 
<li *ngSwitchCase="3">已发货</li> 
<li *ngSwitchDefault>无效</li> 
</ul>

执行事件 (click)=”getData()”

<button class="button" (click)="getData()"> 点击按钮触发事件 </button>
<button class="button" (click)="setData()"> 点击按钮设置数据 </button>
getData(){ /*自定义方法获取数据*/ //获取 alert(this.msg); }
setData(){ //设置值 this.msg='这是设置的值'; }
export class NewsComponent implements OnInit {
  /*
  声明属性的几种方式:
      public      共有  *(默认)  可以在这个类里面使用、也可以在类外面使用
      protected   保护类型        他只有在当前类和它的子类里面可以访问
      private     私有                  只有在当前类才可以访问这个属性
  */
  //定义普通数据
  public title='我是新闻组件';
  msg='我是一个新闻组件的msg';
  private username:string='张三';
  //推荐
  public student:any='我是一个学生的属性(数据)';
  public userinfo:object={
     username:"张三",
      age:'20'
  }
  public message:any;
  public content="<h2>我是一个html标签</h2>";
  //定义数组
  public arr=['1111','2222','33333'];
  //推荐
  public list:any[]=['我是第一个新闻',222222222222,'我是第三个新闻'];
  public items:Array<string>=['我是第一个新闻','我是第二个新闻']
  public userlist:any[]=[{
    username:'张三',
    age:20
  },{
    username:'李四',
    age:21
  },
  {
    username:'王五',
    age:40
  }];
  public cars:any[]=[
      {
        cate:"宝马",
        list:[
          {
            title:'宝马x1',
            price:'30万'
          },
          {
            title:'宝马x2',
            price:'30万'
          },
          {
            title:'宝马x3',
            price:'40万'
          }
        ]
      },
      {
        cate:"奥迪",
        list:[
          {
            title:'奥迪q1',
            price:'40万'
          },
          {
            title:'奥迪q2',
            price:'40万'
          },
          {
            title:'奥迪q3',
            price:'30万'
          }
        ]
      }
  ]
  constructor() { 
    this.message='这是给属性赋值--(改变属性的值)';
    //获取属性的值
    console.log(this.msg);   
    //改变属性的值
    this.msg="我是改变后的msg的值";
  }
  ngOnInit() {}
}
// 页面使用
<h1>angualr模板里面绑定数据</h1>
          <h2>{{title}}</h2>
          <h3>{{msg}}</h3>
          <h4>{{username}}</h4>
          <h5>{{student}}</h5>
         <hr />
          <h6>{{userinfo.username}}</h6>
          <div>
            {{message}}
          </div>
<hr />
<h1>angualr模板里面绑定属性</h1>
        <div title="我是一个div">
          鼠标瞄上去看一下
        </div>
        <br>
        <div [title]="student">
          张三
        </div>
<hr />
<h1>angualr模板里面绑定Html</h1>
        <div>
          {{content}}
        </div>
        <br>
        <span [innerHTML]='content' class="red"></span>
<hr />
<h1>angualr模板里面允许做简单的运算</h1>
1+2={{1+2}}
<hr />
<h1>angualr里面的数据循环</h1>
    <ul>
      <li *ngFor="let item of arr">
          {{item}}
      </li>
    </ul>
    <br>  
    <ol>
      <li *ngFor="let item of list">
        {{item}}
      </li>
    </ol>
    <br>  
    <ol>
      <li *ngFor="let item of items">
        {{item}}
      </li>
    </ol>
    <br>  
    <ul>
      <li *ngFor="let item of userlist">
        {{item.username}}---{{item.age}}
      </li>
    </ul>
    <br>
    <ul>
      <li *ngFor="let item of cars">
          <h2>{{item.cate}}</h2>
          <ol>
            <li *ngFor="let car of item.list">
                {{car.title}}---{{car.price}}
            </li>
          </ol>
      </li>
    </ul>

表单事件

<input type="text" (keyup)="keyUpFn($event)"/>
keyUpFn(e){ console.log(e) }

双向数据绑定 <input [(ngModel)]="inputValue">
注意引入:FormsModule

import { FormsModule } from '@angular/forms';
@NgModule({ 
declarations: [ AppComponent, HeaderComponent, FooterComponent, NewsComponent ],
imports: [ BrowserModule, FormsModule ],
providers: [],
bootstrap: [AppComponent] })
export class AppModule { }
  • 使用
<input type="text" [(ngModel)]="inputValue"/> 
{{inputValue}}

[ngClass]、[ngStyle]

<div [ngClass]="{'red': true, 'blue': false}"> 这是一个 div </div>
 public flag=false;
 <div [ngClass]="{'red': flag, 'blue': !flag}"> 这是一个 div </div> 
public arr = [1, 3, 4, 5, 6];
 <ul><li *ngFor="let item of arr, let i = index">
 <span [ngClass]="{'red': i==0}">{{item}}</span>
 </li> 
</ul>

<div [ngStyle]="{'background-color':'green'}">你好 ngStyle</div> 
public attr='red'; 
<div [ngStyle]="{'background-color':attr}">你好 ngStyle</div>

管道

public today=new Date();
<p>{{today | date:'yyyy-MM-dd HH:mm:ss' }}</p>
export class HomeComponent implements OnInit {
 public title:string='我是一个title';
  public 
  picUrl='https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6d a1ec.png';
  public list:any[]=[
    {
      "title":'我是新闻1'
    },
    {
      "title":'我是新闻2'
    },
    {
      "title":'我是新闻3'
    }
  ];
  public flag:boolean=true;
  public orderStatus:number=3;    
/* 1表示已经支付   2支付并且确认订单   3、表示已经发货   4表示已经收货   其他、无效*/
  public attr:string='orange';
  public today:any=new Date();
  public keywords:string='这是默认值';
  constructor() { 
    console.log(this.today);
  }
  ngOnInit() {
  }
  run(){
      alert('这是一个自定义方法')
  }
  getData(){
    alert(this.title);
  }
  setData(){
    this.title='我是一个改变后的title';
  }
  runEvent(event){
    //ionic必须这样写
    let dom:any=event.target;
    dom.style.color="red";
  }
  keyDown(e){
    if(e.keyCode==13){
        console.log('按了一下回车')
    }else{
      //e.target 获取dom对象
      console.log(e.target.value);
    }
  }
  keyUp(e){
    if(e.keyCode==13){
        console.log(e.target.value);
        console.log('按了一下回车');
    }  
  }
  changeKeywords(){
    this.keywords='我是改变后的值';
  }
  getKeywords(){
    console.log(this.keywords)
  }
}
//html页面
<h1>引入图片</h1>
        <img src="assets/images/02.png" alt="收藏" />
        <img [src]="picUrl" />
<h1>循环数据 显示数据的索引(key)</h1>
      <ul>
        <li *ngFor="let item of list;let key=index;">
          {{key}}---{{item.title}}
        </li>
      </ul>
<h1>条件判断语句 *ngIf</h1>
    <div *ngIf="flag">
      <img src="assets/images/02.png" />
    </div>
    <div *ngIf="!flag">
        <img src="assets/images/01.png" />
    </div> 
    <ul>
        <li *ngFor="let item of list;let key=index;">
            <span  *ngIf="key==1" class="red">{{key}}---{{item.title}}</span> 
            <span  *ngIf="key!=1">{{key}}---{{item.title}}</span> 
        </li>
     </ul>
<h1>条件判断语句 *ngSwitch</h1>
    <span [ngSwitch]="orderStatus">
      <p *ngSwitchCase="1">
          表示已经支付
      </p>
      <p *ngSwitchCase="2">
          支付并且确认订单
      </p>
      <p *ngSwitchCase="3">
          表示已经发货
      </p>
      <p *ngSwitchCase="4">
          表示已经收货
      </p>
      <p *ngSwitchDefault>
        无效订单
      </p>
    </span>
 <h1>属性[ngClass]、[ngStyle]</h1>
                <div class="red">
                    ngClass演示 (尽量不要用dom来改变class)
                </div>
                <div [ngClass]="{'blue':true,'red':false}">
                    ngClass演示
                </div>
                <hr>  
                <div [ngClass]="{'orange':flag,'red':!flag}">
                    ngClass演示
                </div>
              <strong>循环数组,让数组的第一个元素的样式为red ,第二个为orange</strong>
              <ul>
                  <li *ngFor="let item of list;let key=index;" [ngClass]="{'red':key==0,'orange':key==1,'blue':key==2}">
                      {{key}}---{{item.title}}
                  </li>
              </ul>
              <hr>  
              <p style="color:red">我是一个p标签</p>
              <p [ngStyle]="{'color':'blue'}">我是一个p标签</p>
              <p [ngStyle]="{'color': attr}">我是一个p标签  </p>
            <br>
<h1>管道</h1>
      {{today | date:'yyyy-MM-dd HH:mm ss'}}
<h1>事件</h1>
        <strong>{{title}}</strong>
        <button (click)="run()">执行事件</button>
        <button (click)="getData()">执行方法获取数据</button>
        <button (click)="setData()">执行方法改变属性里面的数据</button>
        <button (click)="runEvent($event)">执行方法获取事件对象</button>
<h1>表单事件 事件对象</h1>
          <!-- <input type="text" (keydown)="keyDown()" /> -->
          keyDown
          <input type="text" (keydown)="keyDown($event)" />
          keyUp:
          <input type="text" (keyup)="keyUp($event)" />
<h1>双休数据绑定--MVVM 只是针对表单</h1>
            <input type="text" [(ngModel)]='keywords' />
            {{keywords}}
            <button (click)="changeKeywords()">改变keywords的值</button>
            <button (click)="getKeywords()">获取keywords的值</button>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容