2016-05-06 20 views
8

Cách thích hợp để thao tác DOM trong Angular 2 RC là gì?Truy cập DOM trong Angular 2 RC

Ví dụ: tôi đang tạo dịch vụ cho mục đích gỡ lỗi để trao đổi tham chiếu tệp .css trong tài liệu.

Trước kiễu góc 2 RC, nó đã có thể sử dụng BrowserDomAdapter từ thao tác DOM, như vậy:

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

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

const document = this.domAdapter.defaultDoc(); 

này được lấy cảm hứng từ Title dịch vụ (nay thuộc @angular/platform-browser). Có vẻ như dịch vụ Title vẫn sử dụng nó trong nội bộ, nhưng nó không còn được xuất để sử dụng ngoài Angular. I E.

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

Kết quả trong:

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

Tôi chắc chắn điều này không được xuất và không có sự thay thế. Tôi sẽ tạo một báo cáo lỗi để nó được xuất lại. Nó đã được đề cập một vài lần trong ý kiến ​​rằng nó không nên được sử dụng bởi các nhà phát triển bên ngoài anyway, nhưng tôi không bao giờ thấy một lời giải thích những gì khác nên được sử dụng để thay thế. –

+1

Cảm ơn, @ GünterZöchbauer. Tôi sẽ thử GitHub. Và cảm ơn câu trả lời, bạn là một con thú Angular2. –

Trả lời

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

UPDATE: (comment)

một issue on GitHub giải thích rằng việc loại bỏ được thực sự accidenta l, vì vậy hy vọng nó sẽ trở lại trong rc2. - @ Paul

+2

Điều đó chỉ có thể là giải pháp thay thế. Chúng ta không được phép nhập từ 'src/...' bởi vì nó được coi là thực hiện riêng tư. –

+1

Chính xác. chỉ là một cách giải quyết. Có lẽ họ quên xuất nó hoặc vì một lý do nào đó không. –

+3

một vấn đề trên GitHub giải thích rằng việc loại bỏ thực sự là ngẫu nhiên, vì vậy hy vọng nó sẽ được trở lại trong rc2. https://github.com/angular/angular/issues/8509#issuecomment-217483301 – paul

3

Đối với những người như tôi, mong để tương tác với DOM trong 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(); 
    } 
} 

Bạn không nên sử dụng bất kỳ bộ chuyển đổi. Đây là chi tiết triển khai và không nên sử dụng. Thay vào đó, hãy sử dụng @Inject(DOCUMENT) vào thành phần của bạn và sử dụng nó.

Đọc thêm: https://github.com/angular/angular/issues/8509

+0

Điều này giống như một bản sao/dán nhận xét của Falx: https://github.com/angular/angular/issues/8509#issuecomment-224703913 –

Các vấn đề liên quan