Ngx-drag-scroll: рдкреНрд░рд╢реНрди: рдПрдирдЬреА-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рдЯреИрдмрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЬреВрди 2017  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: bfwg/ngx-drag-scroll

рд╣реИрд▓реЛ, рдЕрднреА-рдЕрднреА рдпрд╣ рдкреНрд▓рдЧрдЗрди google рд╕реЗ рдорд┐рд▓рд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рдЗрдЯ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрд╛ рдЬреЛ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрдиреНрдпреВ рдПрдирдЬреАрдмреА-рдЯреИрдмрд╕реЗрдЯ (рдПрдирдЬреА-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЯреИрдмрд╕реЗрдЯ рдШрдЯрдХ рдореЗрдВ рдХреИрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 17 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп @tommykamkcm , рдореИрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдХреБрдЫ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЖрдкрдХреЗ рддреБрд░рдиреНрдд рдЬрд╡рд╛рдм рдХрд╛ рд╢реБрдХреНрд░рд┐рдпрд╛! рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдХреЗрд╡рд▓ Angular1 рдкрд░ рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ рдореИрдВ Angular2 рдХреЗ рд▓рд┐рдП рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рд╣реВрдВред рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдирд╣реАрдВ:

рддреЛ рдиреАрдЪреЗ рдПрдирдЬреА-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рдЯреИрдмрд╕реЗрдЯ рдШрдЯрдХ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTML рдХреЛрдб рд╣реИ: https://ng-bootstrap.github.io/#/components/tabs

<ngb-tabset>
    <ngb-tab *ngFor="let group of groups" [id]="group.id">
        <template ngbTabTitle>{{group.name}}</template>
        <template ngbTabContent>
            ...
        </template>
    </ngb-tab>
</ngb-tabset>

рдФрд░ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдмрди рдЬрд╛рддрд╛ рд╣реИ

<ngb-tabset _ngcontent-43="">
   <div class="longTabMenu">
    <ul role="tablist" ng-reflect-class-name="nav nav-tabs justify-content-start" class="nav nav-tabs justify-content-start">
        <li class="nav-item">
            <a href="" role="tab" ng-reflect-ng-style="[object Object]" ng-reflect-id="Themes" id="Themes" ng-reflect-class-name="nav-link nav-link-Themes" class="nav-link nav-link-Themes active" aria-controls="Themes-panel" aria-expanded="true" style="border-color: blanchedalmond;">
                Tab 1
            </a>
        </li>
        ...
        </ul>
    </div> 
    <div class="tab-content">
      ...
    </div>
  </ngb-tabset>

рддреЛ рдореИрдВрдиреЗ ng-bootstrap.js рдореЗрдВ drag-scroll рдХреЛ <div class="longTabMenu"> рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред
image

рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдпрд╣ рд╢рд╛рдпрдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ <div class="longTabMenu" drag-scroll ...> рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ, рдЕрдм рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдбреНрд░реИрдЧрд╕реНрдХреНрд░реЙрд▓ рдШрдЯрдХ рдХреЛ рд╣реЛрд╕реНрдЯ рдШрдЯрдХ рдХреЗ ngOnInit / ngAfterViewInit рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреНрд░реИрдЧрд╕реНрдХреНрд░реЙрд▓ рдХреЛ <div ... > рдкрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд╕рдХреВрдВ
рдЬреИрд╕реЗ

@Component({
    selector: 'wd-shows',
    templateUrl: 'app/shows/shows.component.html',
    styleUrls: ['app/shows/shows.component.css'],
    providers: [ShowService, JobService],
})

export class ShowsComponent implements OnInit, AfterViewInit {
...
ngAfterViewInit(): void {
        console.log('AfterViewInit');
        console.log(this.elTablistHolder);
        this.elTablistHolder = this.element.nativeElement.querySelector('.longTabMenu');
        this.renderer.setElementAttribute(this.elTablistHolder, 'drag-scroll', null);
        this.renderer.setElementAttribute(this.elTablistHolder, 'drag-scroll-y-disabled', 'true');
        this.renderer.setElementAttribute(this.elTablistHolder, 'scrollbar-hidden', 'true');
        **// Not sure what's next, still googling**
    }
...
}

рдореБрдЭреЗ рдЕрднреА рддрдХ рдЗрддрдиреА рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА рд╣реИред рдЖрдкрдХрд╛ рд╕рдордп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╣реИрд▓реЛ @bfwg , рдЕрдВрдд рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛! рдореВрд▓ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

  • API рдореЗрдВ рдЙрдкрд▓рдмреНрдз attrs рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  • рдХреЙрд▓ ngOnChanges ()
  • renderer.listen () рдФрд░ renderer.listenGlobal () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░реЗрдВ
export class BlahComponent implements OnInit {
...
dragScrollDom: any;
dragScrollRef: ElementRef;
dragScroll: DragScroll;

constructor(...) {}
ngOnInit(): void {
...
        // At the end of the ngOnInit()
        this.dragScrollDom = this.element.nativeElement.querySelector('.longTabMenu');
        this.dragScrollRef = new ElementRef(this.dragScrollDom );
        this.dragScroll = new DragScroll(this.dragScrollRef, this.renderer);
        this.dragScroll.disabled = false;
        this.dragScroll.scrollbarHidden = true;
        this.dragScroll.yDisabled = true;
        this.dragScroll.xDisabled = false;
        this.dragScroll.ngOnChanges();
        this.renderer.listen(this.dragScrollDo , 'mousedown', (event) => {
            this.dragScroll.onMouseDown(event);
        });
        this.renderer.listenGlobal('document', 'mousemove', (event) => {
            this.dragScroll.onMouseMove(event);
        });
        this.renderer.listenGlobal('document', 'mouseup', (event) => {
            this.dragScroll.onMouseUp(event);
        });
}
...
}

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реБрдЭрд╛рд╡ рднреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ): document.addEventListener() рдФрд░ document.removeEventListener() рдХреЗ рдмрдЬрд╛рдп Angular2 рдХреЗ renderer.listen() рдФрд░ renderer.listenGlobal() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ document.removeEventListener()
рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рд╕реЗ, рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрднрд╡рддрдГ рд╢реБрджреНрдз Angular2 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рд╡реЗрдирд┐рд▓рд╛ JS рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛

рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реЗ рдирд┐рд╖реНрдХрд░реНрд╖/рд╕реБрдЭрд╛рд╡ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ!

@tommykamkcm рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ renderer.listenGlobal() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рдирдЬрд░ рдЖрдП рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рд╣реИрд▓реЛ @bfwg , рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрд▓ рдЬреЛ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ .

рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ: рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ document рдХреЗ рдмрдЬрд╛рдп mouseup mousemove рдкрд░ el.nativeElement $ рдкрд░ рдмрд╛рдВрдзреЗрдВ

this.mouseMoveListener = renderer.listen(el.nativeElement, 'mousemove', this.onMouseMoveHandler);
this.mouseUpListener = renderer.listen(el.nativeElement, 'mouseup', this.onMouseUpHandler);

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

  • API рдореЗрдВ рдЙрдкрд▓рдмреНрдз attrs рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  • рдХреЙрд▓ ngOnChanges ()
  • ~ renderer.listen() рдФрд░ renderer.listenGlobal()~ . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░реЗрдВ

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (...) {}
ngOnInit (): рд╢реВрдиреНрдп {
...
// ngOnInit рдХреЗ рдЕрдВрдд рдореЗрдВ ()
this.dragScrollDom = this.element.nativeElement.querySelector('.longTabMenu');
this.dragScrollRef = рдирдпрд╛ ElementRef (this.dragScrollDom);
this.dragScroll = рдирдпрд╛ рдбреНрд░реИрдЧрд╕реНрдХреНрд░реЙрд▓ (this.dragScrollRef, this.renderer);
this.dragScroll.disabled = рдЕрд╕рддреНрдп;
this.dragScroll.scrollbarHidden = true;
this.dragScroll.yDisabled = true;
this.dragScroll.xDisabled = false;
this.dragScroll.ngOnChanges ();
this.renderer.listen(this.dragScrollDo , 'mousedown', (event) => {
this.dragScroll.onMouseDown (рдИрд╡реЗрдВрдЯ);
});
~this.renderer.listenGlobal('document', 'mousemove', (event) => {
this.dragScroll.onMouseMove (рдИрд╡реЗрдВрдЯ);
});
this.renderer.listenGlobal ('рджрд╕реНрддрд╛рд╡реЗрдЬрд╝', 'рдорд╛рдЙрд╕рдЕрдк', (рдШрдЯрдирд╛) => {
this.dragScroll.onMouseUp (рдИрд╡реЗрдВрдЯ);
});~
}

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ npm install рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдУрд╣, рдЕрдм рд╕рдордЭрд╛ рддреБрдореНрд╣рд╛рд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдореИрдВ рдЖрдЬ рдХреБрдЫ рд╕рдордп рд╕реНрд░реЛрдд рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдПрдирдкреАрдПрдо рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реВрдВрдЧрд╛, рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред

рдЕрд░реЗ @tommykamkcm , рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рд╣реИ рдХрд┐ mouseup рдФрд░ mousemove рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрджрд┐ рдЖрдк рдорд╛рдЙрд╕ рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рддреЛ рд╕рд╛рдордЧреНрд░реА рдЪрд▓рдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧреАред
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЖрдк рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╣реИрд▓реЛ @bfwg , рд╢рд╛рдпрдж рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯреЗрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдорд╛рдЙрд╕ рдпрд╛ рдЙрдВрдЧрд▓реА рд╕реЗ рд▓рдВрдмреЗ рдХреНрд╖реИрддрд┐рдЬ рдореЗрдиреВ рдХреЛ рдбреНрд░реИрдЧ-рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рдерд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдПрдХ HTML5 рд╕реНрд▓рд╛рдЗрдбрд░ рдкрд░ рдШрд╕реАрдЯрд╛ рдирд╣реАрдВ рдЧрдпрд╛, рдЬреЛ рдХрд┐ mousemove рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред рдореИрдВ рдХреНрд▓рд┐рдХ рдФрд░ рдбреНрд░реИрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рд╣реИрдВрдбрд▓ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдореИрдВ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ a) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред рд╣рдореЗрд╢рд╛ рдбреНрд░реИрдЧ рдЬрд╝реЛрди рдпрд╛рдиреА рдореЗрдиреВ рдХреЗ рдЕрдВрджрд░ рдЦреАрдВрдЪреЗрдВ b) рдкреЗрдЬ рдкрд░ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд▓рдЧрдЗрди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдФрд░ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╢рд╛рдпрдж рддрдм рддрдХ рд╣реИ рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдЙрд╕ рдХреЛ рдкрдХрдбрд╝рдХрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдбреНрд░реИрдЧ рдЬрд╝реЛрди = document )

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реЛрдВрдЧреЗ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреНрд░реИрдЧ рдЬреЛрди рдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ [рд╕реНрд╡рдпрдВ | рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ ] рд╢рд╛рдпрдж рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рдп @tommykamkcm , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдПрдирдЬреА-рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рдЯреИрдмрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдирд╣реАрдВред
рдореЗрд░реЗ рд╕рд╛рде рдзреИрд░реНрдп рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж .

рд╣рд╛рдп @tommykamkcm , рдореИрдВрдиреЗ рдбреЗрдореЛ рдРрдк html рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдбрд╛рд▓рд╛ рд╣реИред

    <ngb-tabset>
      <ngb-tab title="Simple">
        <ng-template ngbTabContent>
          <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth
          master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh
          dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum
          iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>
        </ng-template>
      </ngb-tab>
      <ngb-tab>
        <ng-template ngbTabTitle><b>Fancy</b> title</ng-template>
        <ng-template ngbTabContent>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid.
          <div class="demo-one" drag-scroll drag-scroll-y-disabled="true" scrollbar-hidden="true" >
            <img *ngFor="let image of imagelist" [src]="'assets/img/' + image" />
          </div>
        </ng-template>
      </ngb-tab>
    </ngb-tabset>

рдбреНрд░реИрдЧ рд▓рд┐рд╕реНрдЯ рдиреЗ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдирдорд╕реНрддреЗ @bfwg рд▓рдВрдмреА рдЪреБрдкреНрдкреА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдХреЛ <ngb-tab> рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ <ul role="tablist" ... > рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
image

рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ @tommykamkcm , рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЖрдк рдШрдЯрдХ рдХреЗ рдкреНрд░рд╕реНрддреБрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рдХрд▓ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рджреЛ рдФрд░ рдореИрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ред

@tommykamkcm рджреЗрд░реА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВрдиреЗ ng-tab рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреЗрд▓рд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЬреИрд╕реЗ рдЖрдкрдХреЗ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВред

рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ @bfwg , рдЬрдм рддрдХ рдХреЛрдИ рд╣реИрдХ рд╣реИ рддрдм рддрдХ рд╕рднреА рдХреЛ рдЖрд░рд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд╣реЛ рдЬреЛ рд╣реИрдХ рдХрд░реЗ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреНрд▓рдЧрдЗрди рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ DOM рддрддреНрд╡ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ!

рд╡реИрд╕реЗ рднреА, рдЖрдкрдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рддрд╛рд░реАрдл рд╣реИ!

рдЕрд░реЗ @tommykamkcm , рдореИрдВ рдкреНрд▓рдЧрдЗрди рдореЗрдВ attach() рд╡рд┐рдзрд┐ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

"рдПрдХ рдбреЛрдо рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ"

рдпрд╣ рд▓рдЧрднрдЧ рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?
рднрд╛рд░реА рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореИрдВ

рд╣реИрд▓реЛ @bfwg рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ! рдмрд╕ рдЕрдкрдирд╛ рдХреЛрдб рдкрдврд╝реЗрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!

рдирдорд╕реНрддреЗ @tommykamkcm / @bfwg рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рд╕рд╛рде рдПрдирдЬреАрдмреА-рдЯреИрдм рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ

рдзрдиреНрдпрд╡рд╛рдж

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕