Tôi có một thành phần chính với hai thành phần con (dataset-create
và dataset-detail
) trong Angular2. Các điều khiển thành phần Chánh nào trong hai thành phần được hiển thị ở bất kỳ thời điểm nào bằng cách sử dụng mã này trong mẫu của nó:Góc 2: Các thành phần tự xóa khỏi DOM
<div [ngSwitch]="mode">
<template [ngSwitchWhen]="'create'">
<dataset-create [dataset]="dataset" (close)="onDatasetFormClose()"></dataset-create>
</template>
<template [ngSwitchWhen]="'detail'">
<dataset-detail [dataset]="dataset" (close)="onDatasetFormClose()"></dataset-detail>
</template>
</div>
Phụ huynh nghe cho sự kiện (close)
từ trẻ em. Khi nó nhận nó, một hàm callback được gọi là (onDatasetFormClose()
) trong đó có đoạn mã sau:
private onDatasetFormClose() {
this.mode = "list";
}
chức năng này thay đổi giá trị của biến mode
. Điều này làm cho cả hai câu lệnh ngSwitchWhen
bị lỗi và do đó thành phần con hiện đang hoạt động bị hủy.
Ngoài ra, FYI, đây là cách mẫu của một trong những thành phần con trông giống như:
<form novalidate="novalidate">
<button type="button" (click)="onClose()">close</button>
<button type="submit" (click)="onSubmit()">submit</button>
<label for="dataFileD">data</label>
<input id="dataFileD" type="file" (change)="onFileChange($event)">
</form>
Tuy nhiên, giải pháp này có vẻ "sai" đối với tôi, bởi vì nó dựa trên các thành phần cha mẹ (do đó làm khó sử dụng lại nó một cách độc lập).
Tôi đoán một cách khác để đạt được kết quả tương tự sẽ là sử dụng bộ định tuyến. Giải pháp này không chỉ có âm thanh "quá cồng kềnh vì không có lý do", mà còn gặp vấn đề tương tự như giải pháp của tôi ở trên: thành phần con không thể được sử dụng độc lập.
Có thể xóa thành phần con khỏi DOM không? Cách chính xác để xử lý các tình huống như thế này là gì? Có lẽ có các thành phần loại bỏ bản thân khỏi DOM là một thực hành mã hóa Angular2 xấu?
Xin cảm ơn trước.
Tôi nghĩ rằng thành phần đó cần thiết để yêu cầu thành phần chính. Bất kỳ thành phần nào phát ra một sự kiện có thể yêu cầu một thành phần cha. Ví dụ: để triển khai các tab, bạn có thể cần một thành phần 'tabset' gốc, ngoài các thành phần con' tab'. –