2016-09-20 10 views
10

मैं एक सेवा बनाना चाहता हूं जो सभी कुंजीपटल इनपुट का पता लगाता है, कॉन्फ़िगर करने योग्य मैपिंग के आधार पर क्रियाओं में महत्वपूर्ण स्ट्रोक का अनुवाद करता है, और अवलोकन को प्रदर्शित करता है जो विभिन्न तत्व विशिष्ट कुंजी प्रेस पर प्रतिक्रिया करने के लिए बाध्य कर सकते हैं।क्या सेवा में होस्टलिस्टर का उपयोग करना संभव है?

निम्नलिखित मेरे कोड का सरलीकरण अब तक किया गया है, जब यह होस्टलिस्टर एक घटक में था, लेकिन अब मैंने इसे एक ऐसी सेवा में स्थानांतरित कर दिया है, जो इसे निश्चित रूप से शुरू नहीं किया जाता है। क्या सेवा में इस तरह के इनपुट का पता लगाना संभव नहीं है?

import { Injectable, HostListener } from '@angular/core'; 

import { Subject } from 'rxjs/Subject'; 

@Injectable() 
export class InputService { 

    @HostListener('window:keydown', ['$event']) 
    keyboardInput(event: any) { 
     console.log(event); 
    } 
} 
+1

मैं यह संभव नहीं is't लगता है। – yurzui

उत्तर

8

ऐसा लगता है कि इसे किसी सेवा में उपयोग करना संभव नहीं है।

आपको पुरानी विधि window.addEventListener जैसे @yurzui पहले से ही इंगित करना है।

https://plnkr.co/edit/tc53cvQDfLHhaR68ilKr?p=preview

import {Component, NgModule, HostListener, Injectable} from '@angular/core' 
import {BrowserModule} from '@angular/platform-browser' 

@Injectable() 
export class MyService { 

    constructor() { 
    window.addEventListener('keydown', (event) => { 
     console.dir(event); 
    }); 
    } 

} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
    </div> 
    `, 
}) 
export class App { 

    constructor(private _srvc: MyService) { 
    this.name = 'Angular2' 
    } 
} 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    providers: [MyService], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 
+0

के बजाय 'window.addEventListener' का उपयोग करें मुझे लगता है कि यह वही करने का एकमात्र तरीका है जो मैं चाहता हूं। यदि मैं होस्टलिस्टर का उपयोग करना चाहता हूं तो मुझे एक अदृश्य इनपुट हैडलर घटक बनाना होगा और प्रत्येक घटक को उन ईवेंट को उत्सर्जित करने के लिए कॉन्फ़िगर करना होगा। – trelltron

+0

बीट्स एक घटक बनाते हैं। – John

संबंधित मुद्दे

 संबंधित मुद्दे