2017-03-31 14 views
9

Tôi đang cố gắng xây dựng ứng dụng angular2 cho sản xuất cho rằng tôi đang theo dõi blog này. Sau ngc biên soạn thành công của tôi khi tsc biên soạn diễn ra nó tạo ra dưới đây lỗi hiển thị trong hình:Thuộc tính 'X' là riêng tư và chỉ có thể truy cập trong lớp 'xyzComponent'

enter image description here

Sau khi tìm kiếm một thời gian tôi thấy blog này mà giải thích các vấn đề trong "Các bối cảnh tài sản " phần mà tôi không thể hiểu đúng có thể là nó cung cấp cho một số ý tưởng tốt cho bạn rằng những gì đang xảy ra sai. về cơ bản khi chúng tôi tạo một biến riêng tư, chúng tôi đang nhận được "L ERI: Thuộc tính là riêng tư và chỉ có thể truy cập trong lớp". Tôi không hiểu tại sao nó lại đến.

Vui lòng giúp chúng tôi vì chúng tôi đang đập đầu vào vấn đề này trong vài ngày qua.

+0

bạn đã cố thay đổi thuộc tính từ riêng tư sang công khai chưa? –

+0

bạn có thể chia sẻ nội dung tệp ts có lỗi không? –

Trả lời

20

Đối với một thành phần nhất định, tất cả các thành viên của nó (phương thức, thuộc tính) truy cập theo mẫu của nó phải được công khai trong kịch bản biên dịch AOT. Điều này là do thực tế là một mẫu được biến thành một lớp TS. Một lớp được tạo ra và một thành phần là 2 lớp riêng biệt bây giờ và bạn không thể truy cập các thành viên riêng tư chéo lớp.

Tóm lại: bạn không thể truy cập các thành viên riêng tư trong các mẫu của mình nếu bạn muốn sử dụng quá trình biên dịch trước.

Để giải thích rõ hơn https://github.com/angular/angular/issues/11422

2

Vì vậy, tôi đã khắc phục sự cố này tôi sẽ giữ điều này ngắn gọn và đơn giản. Để khắc phục điều này, tôi đọc số này blog. Như trong phần "Thuộc tính ngữ cảnh" Giải pháp cho vấn đề này là Không sử dụng hoặc tạo biến riêng nếu bạn muốn sử dụng nó trong chế độ xem trực tiếp khi tạo bản dựng của mình với AOT (tức là, Phía trước Thời Gian) để sản xuất.

* Ví dụ *

// component.ts 
@Component({ 
    selector: 'third-party', 
    template: ` 
    {{ _initials }} 
    ` 
}) 
class ThirdPartyComponent { 
    private _initials: string; 
    private _name: string; 

    @Input() 
    set name(name: string) { 
    if (name) { 
     this._initials = name.split(' ').map(n => n[0]).join('. ') + '.'; 
     this._name = name; 
    } 
    } 
} 

đầu ra: '_initials' tài sản là tư nhân và chỉ có thể trong lớp 'ThirdPartyComponent'.

Giải pháp:

bản cập nhật này private _initials: string; chỉ đơn giản là _initials: string;

Đối với câu trả lời này Harish Gadiya cung cấp cho tôi một số giúp đỡ để thanx cho điều đó.

+0

không cần phải sử dụng '_name' ở đó, nó có thể giống như bạn sử dụng' this.' và 'name' khác của nó một biến cục bộ' this.name = name; ' – LazerBanana

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