• 技术文章 >web前端 >js教程

    详解Angular中的模板语法

    青灯夜游青灯夜游2021-04-23 10:37:21转载253
    本篇文章给大家详细介绍一下Angular中的模板语法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    相关教程推荐:《angular教程

    插值表达式

    @Component({
      selector: 'app-test-interpolation',
      templateUrl: './test-interpolation.component.html',
      styleUrls: ['./test-interpolation.component.css']
    })
    export class TestInterpolationComponent implements OnInit {
    
      title = '插值表达式';
    
      constructor() { }
    
      ngOnInit() {
      }
    
      getValue(): string {
        return '值';
      }
    }
    <div class="panel panel-primary">
      <div class="panel-heading">基插值语法</div>
      <div class="panel-body">
        <h3>
          欢迎来到 {{title}}!
        </h3>
        <h3>2+2 = {{2 + 2}}</h3>
        <h3>调用方法{{getValue()}}</h3>
      </div>
    </div>

    模板变量

    @Component({
      selector: 'app-test-template-variables',
      templateUrl: './test-template-variables.component.html',
      styleUrls: ['./test-template-variables.component.css']
    })
    export class TestTempRefVarComponent implements OnInit {
    
      constructor() { }
    
      ngOnInit() {
      }
    
      public saveValue(value: string): void {
        console.log(value);
      }
    }
    <div class="panel panel-primary">
      <div class="panel-heading">模板变量</div>
      <div class="panel-body">
        <input #templateInput>
        <p>{{templateInput.value}}</p>
        <button class="btn btn-success" (click)="saveValue(templateInput.value)">局部变量</button>
      </div>
    </div>

    值绑定、事件绑定、双向绑定

    值绑定:[]

    @Component({
      selector: 'app-test-value-bind',
      templateUrl: './test-value-bind.component.html',
      styleUrls: ['./test-value-bind.component.css']
    })
    export class TestValueBindComponent implements OnInit {
    
      public imgSrc = './assets/imgs/1.jpg';
    
      constructor() { }
    
      ngOnInit() {
      }
    }
    <div class="panel panel-primary">
      <div class="panel-heading">单向值绑定</div>
      <div class="panel-body">
        <img [src]="imgSrc" />
      </div>
    </div>

    事件绑定:()

    @Component({
      selector: 'app-test-event-binding',
      templateUrl: './test-event-binding.component.html',
      styleUrls: ['./test-event-binding.component.css']
    })
    export class TestEventBindingComponent implements OnInit {
    
      constructor() { }
    
      ngOnInit() {
      }
    
      public btnClick(event: any): void {
        console.log(event + '测试事件绑定!');
      }
    }
    <div class="panel panel-primary">
        <div class="panel-heading">事件绑定</div>
        <div class="panel-body">
            <button class="btn btn-success" (click)="btnClick($event)">点击按钮</button>
        </div>
    </div>

    双向绑定:[()]

    @Component({
      selector: 'app-test-twoway-binding',
      templateUrl: './test-twoway-binding.component.html',
      styleUrls: ['./test-twoway-binding.component.css']
    })
    export class TestTwowayBindingComponent implements OnInit {
    
      public fontSizePx = 14;
    
      constructor() { }
    
      ngOnInit() {
      }
    
    }
    <div class="panel panel-primary">
      <div class="panel-heading">双向绑定</div>
      <div class="panel-body">
        <app-font-resizer [(size)]="fontSizePx"></app-font-resizer>
        <div [style.font-size.px]="fontSizePx">Resizable Text</div>
      </div>
    </div>
    @Component({
      selector: 'app-font-resizer',
      templateUrl: './font-resizer.component.html',
      styleUrls: ['./font-resizer.component.css']
    })
    export class FontResizerComponent implements OnInit {
    
      @Input()
      size: number | string;
    
      @Output()
      sizeChange = new EventEmitter<number>();
    
      constructor() { }
    
      ngOnInit() {
      }
    
      decrement(): void {
        this.resize(-1);
      }
    
      increment(): void {
        this.resize(+1);
      }
    
      resize(delta: number) {
        this.size = Math.min(40, Math.max(8, +this.size + delta));
        this.sizeChange.emit(this.size);
      }
    }
    <div style="border: 2px solid #333">
      <p>这是子组件</p>
      <button (click)="decrement()" title="smaller">-</button>
      <button (click)="increment()" title="bigger">+</button>
      <label [style.font-size.px]="size">FontSize: {{size}}px</label>
    </div>

    内置结构型指令

    *ngIf

    @Component({
      selector: 'app-test-ng-if',
      templateUrl: './test-ng-if.component.html',
      styleUrls: ['./test-ng-if.component.css']
    })
    export class TestNgIfComponent implements OnInit {
    
      isShow = true;
    
      constructor() { }
    
      ngOnInit() {
      }
    }
    <div class="panel panel-primary">
      <div class="panel-heading">*ngIf的用法</div>
      <div class="panel-body">
        <p *ngIf="isShow" style="background-color:#ff3300">显示内容</p>
      </div>
    </div>

    *ngFor

    @Component({
      selector: 'app-test-ng-for',
      templateUrl: './test-ng-for.component.html',
      styleUrls: ['./test-ng-for.component.css']
    })
    export class TestNgForComponent implements OnInit {
    
      races = [
        {name: 'star'},
        {name: 'kevin'},
        {name: 'kent'}
      ];
    
      constructor() { }
    
      ngOnInit() {
      }
    
    }
    <div class="panel panel-primary">
      <div class="panel-heading">*ngFor用法</div>
      <div class="panel-body">
        <h3>名字列表</h3>
        <ul>
          <li *ngFor="let name of names;let i=index;">
           {{i}}-{{name.name}}
          </li>
        </ul>
      </div>
    </div>

    ngSwitch

    @Component({
      selector: 'app-test-ng-switch',
      templateUrl: './test-ng-switch.component.html',
      styleUrls: ['./test-ng-switch.component.css']
    })
    export class TestNgSwitchComponent implements OnInit {
    
      status = 1;
    
      constructor() { }
    
      ngOnInit() {
      }
    
    }
    <div class="panel panel-primary">
      <div class="panel-heading">ngSwitch用法</div>
      <div class="panel-body">
        <div [ngSwitch]="status">
          <p *ngSwitchCase="0">Good</p>
          <p *ngSwitchCase="1">Bad</p>
          <p *ngSwitchDefault>Exception</p>
        </div>
      </div>
    </div>

    内置属性型指令

    HTML 属性与 DOM 属性关系

    注意: 插值表达式与属性绑定是同一个东西, 插值表达式属于 DOM 属性绑定。

    NgClass

    @Component({
      selector: 'app-test-ng-class',
      templateUrl: './test-ng-class.component.html',
      styleUrls: ['./test-ng-class.component.scss']
    })
    export class TestNgClassComponent implements OnInit {
      public currentClasses: {};
    
      public canSave = true;
      public isUnchanged = true;
      public isSpecial = true;
    
      constructor() { }
    
      ngOnInit() {
        this.currentClasses = {
          'saveable': this.canSave,
          'modified': this.isUnchanged,
          'special': this.isSpecial
        };
      }
    }
    <div class="panel panel-primary">
      <div class="panel-heading">NgClass用法</div>
      <div class="panel-body">
        <div [ngClass]="currentClasses">设置多个样式</div>
        <div [class.modified]='true'></div>
      </div>
    </div>
    .saveable {
        font-size: 18px;
    }
    
    .modified {
        font-weight: bold;
    }
    
    .special {
        background-color: #ff3300;
    }

    NgStyle

    @Component({
      selector: 'app-test-ng-style',
      templateUrl: './test-ng-style.component.html',
      styleUrls: ['./test-ng-style.component.css']
    })
    export class TestNgStyleComponent implements OnInit {
    
      currentStyles: { };
      canSave = false;
      isUnchanged = false;
      isSpecial = false;
    
      constructor() { }
    
      ngOnInit() {
        this.currentStyles = {
          'font-style': this.canSave ? 'italic' : 'normal',
          'font-weight': !this.isUnchanged ? 'bold' : 'normal',
          'font-size': this.isSpecial ? '36px' : '12px'
        };
      }
    
    }
    <div class="panel panel-primary">
      <div class="panel-heading">NgStyle用法</div>
      <div class="panel-body">
        <div [ngStyle]="currentStyles">
          用NgStyle批量修改内联样式!
        </div>
        <div [style.font-size]="isSpecial? '36px' : '12px'"></div>
      </div>
    </div>

    NgModel

    @Component({
      selector: 'app-test-ng-model',
      templateUrl: './test-ng-model.component.html',
      styleUrls: ['./test-ng-model.component.css']
    })
    export class TestNgModelComponent implements OnInit {
    
      name = 'kevin';
    
      constructor() { }
    
      ngOnInit() {
      }
    
    }
    <div class="panel panel-primary">
        <div class="panel-heading">NgModel的用法</div>
        <div class="panel-body">
            <p class="text-danger">ngModel只能用在表单类的元素上面</p>
            <input type="text" name="name" [(ngModel)]="name">
        </div>
    </div>

    小工具

    管道

    Angular 内置的常用管道:

    uppercase 将字母转换成大写 {{‘aaa’ | uppercase}}
    lowercase 将字母转换成小写 {{‘BBB’ | lowercase}}

    {{ birthday | date: ‘yyyy-MM-dd HH:mm:ss’}}

    {{ pi | number: ‘2.2-2’}}
    2.2-2: 表示是保留 2 位整数和 2 位小数。
    2-2: 表示最少 2 位小数,最大 2 位小数。

    test-pipe.component.ts

    @Component({
      selector: 'app-test-pipe',
      templateUrl: './test-pipe.component.html',
      styleUrls: ['./test-pipe.component.css']
    })
    export class TestPipeComponent implements OnInit {
    
      currentTime: Date = new Date();
      
      str = 'aaa';
    
      money = 34.567;
    
    
      constructor() {
      }
    
      ngOnInit() {
        window.setInterval(
          () => { this.currentTime = new Date() }
          , 1000);
      }
    }

    test-pipe.component.html

    <div class="panel panel-primary">
        <div class="panel-heading">管道的用法</div>
        <div class="panel-body">
          {{ currentTime | date:'yyyy-MM-dd HH:mm:ss' }}
        </div>
        <div class="panel-body">
          {{ str | uppercase }}
        </div>
        <div class="panel-body">
          {{ money | number: '2.2-2' }}
        </div>
    </div>

    非空断言

    @Component({
      selector: 'app-test-safe-nav',
      templateUrl: './test-not-null-assert.component.html',
      styleUrls: ['./test-not-null-assert.component.css']
    })
    export class TestSafeNavComponent implements OnInit {
    
      public currentValue: any = null;
    
      constructor() { }
    
      ngOnInit() {
      }
    
    }
    <div class="panel panel-primary">
      <div class="panel-heading">安全取值</div>
      <div class="panel-body">
        名字:{{currentValue?.name}}
      </div>
    </div>

    更多编程相关知识,可访问:编程教学!!

    以上就是详解Angular中的模板语法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:Angular 模板语法
    上一篇:不属于javascript的数据类型是什么 下一篇:ajax和javascript区别是什么
    大前端线上培训班

    相关文章推荐

    • Angular10如何配置webpack打包?方法介绍• 20个优秀的Angular开源项目,你了解几个呢?• 详解Angular中的NgModule(模块)• 详解Angular中的依赖注入模式• 前端框架之争:除了Vue、Angular和React还有谁与之争锋?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网