2016-05-06 18 views
8

में डीओएम एक्सेस करना कोणीय 2 आरसी में डीओएम में हेरफेर करने का सही तरीका क्या है?कोणीय 2 आरसी

उदाहरण के लिए, मैं दस्तावेज़ में .css फ़ाइल संदर्भों को स्वैप करने के लिए डीबग उद्देश्यों के लिए एक सेवा बना रहा हूं।

कोणीय 2 आर सी से पहले, यह डोम जोड़तोड़ से BrowserDomAdapter उपयोग करने के लिए है, तो तरह संभव हो गया था:

import { BrowserDomAdapter } from 'angular2/platform/browser'; 

... 
constructor(private domAdapter: BrowserDomAdapter) { 
} 
... 

const document = this.domAdapter.defaultDoc(); 

यह Title सेवा (@angular/platform-browser में अब) से प्रेरित था। ऐसा लगता है कि Title सेवा अभी भी आंतरिक रूप से इसका उपयोग करती है, लेकिन अब इसे कोणीय के बाहर उपयोग के लिए निर्यात नहीं किया गया है। अर्थात।

import { BrowserDomAdapter } from "@angular/platform-browser"; 

परिणाम में:

Module '".../@angular/platform-browser/index"' has no exported member 'BrowserDomAdapter' 
+1

मैं बहुत यकीन है कि यह निर्यात नहीं कर रहा है कर रहा हूँ और वहाँ कोई विकल्प नहीं है। मैं इसे फिर से निर्यात करने के लिए एक बग रिपोर्ट तैयार करूंगा। टिप्पणी में कुछ बार उल्लेख किया गया था कि इसे बाहरी डेवलपर्स द्वारा किसी भी तरह इस्तेमाल नहीं किया जाना चाहिए, लेकिन मैंने कभी स्पष्टीकरण नहीं देखा कि इसके बजाय और क्या उपयोग किया जाना चाहिए। –

+1

धन्यवाद, @ गुंटर ज़ोचबाउर। मैं गिटहब कोशिश करूंगा। और उत्तर के लिए धन्यवाद, आप एक कोणीय 2 जानवर हैं। –

उत्तर

5
import {BrowserDomAdapter} from '@angular/platform-browser/src/browser/browser_adapter'; 

अद्यतन: (टिप्पणी)

एक issue on GitHub बताते हैं कि वास्तव में हटाने accidenta था एल, तो उम्मीद है कि यह आरसी 2 में वापस आ जाएगा। - @paul

+2

यह केवल एक कामकाज हो सकता है। हमें 'src/... 'से आयात नहीं करना चाहिए क्योंकि इसे निजी कार्यान्वयन माना जाता है। –

+1

बिल्कुल। बस एक कामकाज। हो सकता है कि वे इसे निर्यात करना भूल गए हों या किसी कारण से बस नहीं किया। –

+3

गिटहब पर एक मुद्दा बताता है कि निष्कासन वास्तव में आकस्मिक था, इसलिए उम्मीद है कि यह आरसी 2 में वापस आ जाएगा। https://github.com/angular/angular/issues/8509#issuecomment-217483301 – paul

3

मेरे जैसे लोगों के लिए, angular 2.4 में डोम के साथ बातचीत के लिए इंतजार कर रहे:

import { Component, Inject } from '@angular/core'; 
import { DOCUMENT } from '@angular/platform-browser'; 

@Component({}) 
export class MyClass { 

    constructor (@Inject(DOCUMENT) private document) { } 

    doSomething() { 
     this.document.someMethodOfDocument(); 
    } 
} 

आप किसी भी एडाप्टर का उपयोग नहीं करना चाहिए। यह कार्यान्वयन विस्तार है और इसका उपयोग नहीं किया जाना चाहिए। इसके बजाय @Inject(DOCUMENT) अपने घटक में और इसका उपयोग करें।

अतिरिक्त पठन: https://github.com/angular/angular/issues/8509

+0

यह फ्लेक्स की टिप्पणी की प्रतिलिपि/पेस्ट की तरह दिखता है: https://github.com/angular/angular/issues/8509#issuecomment-224703913 –

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