2016-12-14 5 views
4

角2のマスタスレーブディレクティブ通信。インターディレクティブ私はAngular2で選択可能なリストを作成したい通信

import {Directive, ElementRef, HostListener, Input, Output, EventEmitter} from "@angular/core"; 

@Directive({selector: 'li'}) 
export class ListItem { 

    @Input() private selectableItem: any; 
    @Output('selectedEvent') private selectedEvent: EventEmitter<any> = new EventEmitter<any>(); 

    constructor(private hostElement: ElementRef) { 
    } 

    @HostListener('click', ['$event']) 
    private toggleSelected(event: MouseEvent): void { 
     this.hostElement.nativeElement.classList.toggle('selected'); 
     this.selectedEvent.emit(this.selectableItem); 
    } 

} 



@Directive({selector: '[selectableList]'}) 
export class SelectableListDirective { 

    constructor(private hostElement: ElementRef) { 
    } 

    @HostListener('selectedEvent', ['$event']) 
    private liWasClicked(event): void { 
     console.log(event); 
    } 
} 

そして、私はそうのようにそれを使用しようとしている:

<ul selectableList> 
    <li *ngFor="let item of items" [selectableItem]="item"> 
     <span>{{item}}</span> 
    </li> 
</ul> 

Plunker:https://plnkr.co/edit/umIE6yZwjyGGvJdYe7VS?p=preview

問題is:liWasClickedは決してクリックされません!

+0

私はここで同じ問題に直面しています。子供の指示に親の指示を伝えることはできません。誰でも助けることができますか? – soywod

+0

@soywodディレクティブにテンプレートがある場合、イベントは機能しますが、私の場合はそうではありません。 – dalvarezmartinez1

答えて

0

私はちょうどあなたが何をしたいんディレクティブを作っ: https://www.npmjs.com/package/ngx-selectable-list

これは、マスターディレクティブです: https://github.com/darkbasic/ngx-selectable-list/blob/master/src/directive/selectable-list/selectable-list.directive.ts

これは、スレーブ・ディレクティブです:を通じて彼らが通信 https://github.com/darkbasic/ngx-selectable-list/blob/master/src/directive/selectable-item/selectable-item.directive.ts

残念ながらこれは唯一の方法です。

梱包上の問題が発生したため、まだREADMEを書いていませんでした。その結果、angular-cliを使用すると、現時点ではAOTモードでしか動作しない可能性があります。

あなたがここにいくつかの使用例

モード1を見つけることができます:

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chat-viewer/containers/chat/chat.component.ts

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chat-viewer/components/messages-list/messages-list.component.ts

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chat-viewer/components/message-item/message-item.component.ts

プレスによって活性化され、我々は唯一の複数選択を行う。このモードでは、突発的な確認ボタンが表示されます。

モード2:それはタップイベントをリッスンが、それはまた、複数選択モードをアクティブにします

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chats-lister/containers/chats/chats.component.ts

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chats-lister/components/chats-list/chats-list.component.ts

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chats-lister/components/chat-item/chat-item.component.ts

今ディレクティブは、単一および複数の両方のモードで動作しますプレスイベントで。

モード3:

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/b941aa2202279c4e1c879125a8551b0c4649e7d8/src/app/chats-lister/containers/chats/chats.component.ts

私は以前、常にコンテンツ投影を通じて確認ボタンを投影していますが、違っそれを行うことができます。代わりに、あなたはselectItemIdsイベントをリッスンし、ユーザーがクリックいったんselectionConfirmedイベントを発することができますあなた自身の確認ボタンを押してください。

モード4:

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chats-creation/containers/new-group/new-group.component.ts

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chats-creation/components/users-list/users-list.component.ts

https://github.com/Urigo/whatsapp-client-angularcli-material/blob/master/src/app/chats-creation/components/user-item/user-item.component.ts

この例ではディレクティブはmultiple_tapモードで動作:複数の選択ではなく、プレスイベントのタップによりinitializatedれます。

ドキュメントを作成し、いくつかのGIFを添付してさまざまなモードを表示すると、すべてが明確になります。

関連する問題