2016-02-20 10 views
25

एंगुलर 2 में आकार बदलने वाली घटनाओं पर विंडो चौड़ाई कैसे प्राप्त करें, यह जानने का प्रयास कर रहा है।कोणीय 2 विंडो चौड़ाई प्राप्त करें

export class SideNav { 

    innerWidth: number; 

    constructor(private window: Window){ 

     let getWindow = function(){ 
      return window.innerWidth; 
     }; 

     window.onresize = function() { 
      this.innerWidth = getWindow(); 
      console.log(getWindow()); 
     }; 
} 

मैं खिड़की करने के लिए अपने एप्लिकेशन में पहुँच प्राप्त करने के प्रदान का उपयोग कर bootstrap.ts फ़ाइल में विश्व स्तर पर खिड़की प्रदाता का आयात कर रहा हूँ: यहाँ मेरी कोड है। मेरी समस्या यह है कि यह मुझे एक विंडो आकार देता है, लेकिन खिड़की का आकार बदलने पर - यह विंडो आकार बदलता है, भले ही यह आकार एक ही आकार को दोहराए। console.log उदाहरण के लिए छवि देखें: Screenshot image

मेरे समग्र लक्ष्य एक चर onresize को खिड़की संख्या निर्धारित करने के तो मैं टेम्पलेट में इस तक पहुंच हो सकती है सक्षम होने के लिए है। मैं यहां क्या गलत कर रहा हूं पर कोई विचार?

धन्यवाद!

उत्तर

51
<div (window:resize)="onResize($event)" 
onResize(event) { 
    event.target.innerWidth; 
} 

एक घटक टेम्पलेट

या घटकों मेजबान तत्व में ही

@HostListener('window:resize', ['$event']) 
onResize(event) { 
    event.target.innerWidth; 
} 
+0

क्यों किया आप @ होस्टलिस्टर टिप्पणी करते हैं? मेरे लिए यह केवल टिप्पणी-स्लेश के बिना काम करता है, लेकिन फिर यह पूरी तरह से काम करता है :-) –

+1

यह एक वैकल्पिक तरीका के रूप में है। आप इसे टेम्पलेट में किसी तत्व में जोड़ सकते हैं जैसा कि पहले कोड में दिखाया गया है या घटक होस्ट तत्व को सुनने के लिए '@HostListener()' का उपयोग करें। मैंने इसे और अधिक स्पष्ट करने के लिए अपना उत्तर अपडेट किया। –

7

इस मामले में पर सुनने में एक बच्चे तत्व पर स्क्रॉल ईवेंट पर सूचना पाने के लिए आपको मैन्युअल रूप से परिवर्तन पहचान को चलाने की आवश्यकता है। चूंकि आप कोणीय के बाहरी संदर्भ से घटक चर को संशोधित कर रहे हैं, मूल रूप से आकार बदलने का ईवेंट Angular2 परिवर्तन पहचान प्रणाली द्वारा पैच बंदर नहीं मिलता है।

कोड

import {ChangeDetectorRef} from 'angular2/core' 

export class SideNav { 
    innerWidth: number; 

    constructor(private window: Window, private cdr: ChangeDetectorRef){ 

     let getWindow =() => { 
      return window.innerWidth; 
     }; 

     window.onresize =() => { 
      this.innerWidth = getWindow(); 
      this.cdr.detectChanges(); //running change detection manually 
     }; 
    } 
} 

बल्कि मैं this answer के लिए जाने के लिए, जो अधिक क्लीनर लगता है कि आप सुझाव देना चाहते हैं

+1

यह बदले गए परिवर्तन के बारे में जानना दिलचस्प था - लेकिन मुझे सचमुच खुशी हुई कि आपने मुझे पर्यवेक्षण समाधान की ओर इशारा किया - मैं इसके साथ एक बहुत ही पुन: प्रयोज्य साफ तरीके से वैश्विक खिड़की की चौड़ाई और ऊंचाई के लिए एक नई सेवा जोड़ने में सक्षम था - तो आपको धन्यवाद बहुत! –

19

उपयोग NgZone परिवर्तन का पता लगाने को गति प्रदान करने:

constructor(ngZone:NgZone) { 
    window.onresize = (e) => 
    { 
     ngZone.run(() => { 
      this.width = window.innerWidth; 
      this.height = window.innerHeight; 
     }); 
    }; 
} 
+0

ngZone के साथ दिलचस्प विचार - मुझे इसे आजमा देना होगा! वर्तमान में परिवर्तनों को स्वतः पहचानने के लिए एक अवलोकन कार्यान्वयन का उपयोग करना। –

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