美文网首页
Angular cdk 学习之 Bidirectionality

Angular cdk 学习之 Bidirectionality

作者: tuacy | 来源:发表于2018-12-19 08:35 被阅读35次

           cdk Bidirectionality提供给我们的功能,就是用来设置布局方向。更加详细的内容可以参考官网 https://material.angular.io/cdk/bidi/overview

           使用之前先provider BidiModule

    import {BidiModule} from '@angular/cdk/bidi';
    

           bidi里面咱们需要知道的就两个东西:一个Service Directionality、一个指令 Dir。

    一 Directionality

           Directionality Service两个左右:获取当前应用程序的布局方向、监听应用程序布局方向的变化。

    1.1 Directionality Service属性方法

    export declare class Directionality implements OnDestroy {
        /** 当前应用程序的布局方向 'ltr' or 'rtl' */
        readonly value: Direction;
        /** 当前应用程序的布局方向发生改变了的回调函数 'ltr' / 'rtl' state changes. */
        readonly change: EventEmitter<Direction>;
    }
    

    1.2 Directionality Service使用

    import {Component, Inject, OnDestroy} from '@angular/core';
    import {DIR_DOCUMENT, Directionality} from '@angular/cdk/bidi';
    import {Subscription} from "rxjs";
    
    @Component({
        selector: 'app-cdk-bidi',
        templateUrl: './cdk-bidi.component.html',
        styleUrls: ['./cdk-bidi.component.less']
    })
    export class CdkBidiComponent implements OnDestroy {
        private _dirChangeSubscription = Subscription.EMPTY;
    
        constructor(
            @Inject(DIR_DOCUMENT) public dirDoc: any,
            public directionality: Directionality
        ) {
            this._dirChangeSubscription = directionality.change.subscribe(() => {
                console.log('bbb');
            });
        }
    
    
        ngOnDestroy() {
            this._dirChangeSubscription.unsubscribe();
        }
    }
    
    

    常规Service的用法

    二 Dir

           Dir指令用于设置布局方向和监听布局方向的变化。

           Selector: [dir]

           Exported as: dir

    2.1 Dir指令属性

    属性 类型 解释
    change: EventEmitter<Direction> @Output('dirChange') 当前视图布局方向发生改变的时候调用
    value: Direction 当前视图元素的布局方向

    2.2 Dir指令使用

    import {Component} from '@angular/core';
    
    @Component({
        selector: 'app-cdk-bidi',
        template: `
            <!--从左到右-->
            <p dir="LTR" style="border: solid 1px #ccc; color: red; padding: 10px">
                从左到右排列
            </p>
            <!--从右到左-->
            <p dir="RTL" style="border: solid 1px #ccc; color: red; padding: 10px">
                从右到左排列
            </p>
            <div dir="RTL" style="border: solid 1px #ccc; padding: 10px">
    
                <div style="margin-left: 8px; margin-right: 8px; display: inline-block; 
                width: 250px; background-color: #cccccc; padding: 4px; color: red"
                     dir="LTR">第一个位置--内容靠左
                </div>
                <div style="margin-left: 8px; margin-right: 8px; display: inline-block; 
                width: 250px; background-color: #cccccc; padding: 4px; color: red"
                     dir="RTL">第二个位置--内容靠右
                </div>
    
            </div>
            <!--可以控制方向-->
            <p [dir]="dir" (dirChange)="dirChange()" style="border: solid 1px #ccc; color: red; padding: 10px">
                可以动态切换方向
            </p>
    
            <button (click)="switchDir()">切换方向</button>
        `
    })
    export class CdkBidiComponent {
        dir = "rtl";
    
        switchDir() {
            if (this.dir === "rtl") {
                this.dir = "ltr";
            } else {
                this.dir = "rtl";
            }
        }
    
        dirChange() {
            console.log('aaa');
        }
    }
    
    

           因为cdk bidi的使用非常简单,所以我们讲的也非常的简单。实例连接 https://github.com/tuacy/angular-cdk-study

    相关文章

      网友评论

          本文标题:Angular cdk 学习之 Bidirectionality

          本文链接:https://www.haomeiwen.com/subject/oprdkqtx.html