Có cách nào trong Angular2 có sự kiện được kích hoạt khi thành phần của tôi hiển thị không? Nó được đặt trong một tabcontrol và tôi muốn được thông báo khi người dùng chuyển mạch tôi muốn thành phần của tôi để kích hoạt một sự kiện.Sự kiện khi thành phần hiển thị
Trả lời
Điều cuối cùng tôi đã làm (không đẹp lắm nhưng hoạt động trong khi tôi không có cách nào tốt hơn để làm điều đó ...) là sử dụng gọi lại ngAfterContentChecked()
và tự xử lý thay đổi.
@ViewChild('map') m;
private isVisible: boolean = false;
ngAfterContentChecked(): void
{
if (this.isVisible == false && this.m.nativeElement.offsetParent != null)
{
console.log('isVisible switched from false to true');
this.isVisible = true;
this.Refresh();
}
else if (this.isVisible == true && this.m.nativeElement.offsetParent == null)
{
console.log('isVisible switched from true to false');
this.isVisible = false;
}
}
Bạn có thể sử dụng ngAfterViewInit()
callback
https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html
dường như không phù hợp với nhu cầu của tôi, tôi đã đặt nhật ký bên trong cuộc gọi lại này và nó chỉ được gọi một lần (bất kể thành phần của tôi có hiển thị hay không) – Shimrod
Góc không có cách nào để biết khi nào một thành phần hiển thị nếu nó chỉ ẩn đằng sau phần tử DOM khác. Nếu bạn sử dụng '* ngIf =" "' để hiển thị/ẩn, sau đó thành phần khi tab được chọn hoặc bỏ chọn, sau đó 'ngAfterViewInit()' được gọi là mọi lúc –
Không có sự kiện như vậy, nhưng nếu bạn đang sử dụng một điều khiển tab, cách thích hợp để làm điều này sẽ tạo ra một sự thay đổi tab @Output
cho điều khiển tab của bạn nếu tùy chỉnh, nếu không, hầu hết các điều khiển tab (như ng-bootstrap) cũng có một số sự kiện thay đổi tab.
Nếu thành phần của bạn phải biết điều này, bạn có thể sử dụng sự kiện thay đổi tab này để phát hiện tab nào hiển thị và nếu bạn biết tab nào hiển thị, bạn cũng biết liệu thành phần của mình có hiển thị hay không. Vì vậy, bạn có thể làm một cái gì đó như thế này:
onTabChange(event) {
this.currentTab = /** Get current tab */;
}
Và sau đó bạn có thể gửi nó đến thành phần của bạn chính nó nếu bạn có một đầu vào:
@Input() activated: boolean = false;
Và sau đó bạn có thể áp dụng nó với:
<my-component [activated]="currentTab == 'tabWithComponent'"></my-component>
Bây giờ bạn có thể nghe OnChanges
để xem giá trị mô hình activated
có thay đổi thành true
hay không.
Bạn cũng có thể cấu trúc này để sử dụng dịch vụ với một Observable
như thế này:
@Injectable()
export class TabService {
observable: Observable<any>;
observer;
constructor() {
this.observable = Observable.create(function(observer) {
this.observer = observer;
});
}
}
Khi một thành phần mong muốn lắng nghe những thay đổi này, nó có thể đăng ký để tabService.observable
. Khi tab của bạn thay đổi, bạn có thể đẩy các mục mới vào nó bằng tabService.observer.next()
.
Đó là một ý tưởng tuyệt vời, tuy nhiên tôi không làm nó hoạt động trong trường hợp của tôi vì tabcontrol tôi sử dụng là từ primeng và họ chỉ cung cấp một sự kiện trên tab thay đổi _before_ tab đã thực sự thay đổi => thành phần của tôi không hiển thị tại thời điểm này ... – Shimrod
- 1. Vue.js có kích hoạt sự kiện sau khi thành phần được hiển thị không?
- 2. Sự kiện hiển thị JQuery/Javascript/DOM
- 3. Thay đổi nguồn sự kiện Fullcalendar sau khi hiển thị
- 4. Tạo plugin, hiển thị sự kiện
- 5. sự kiện lịch Android không hiển thị
- 6. Góc 2 Thành phần không hiển thị
- 7. Thành phần Angular2 không được hiển thị
- 8. Thành phần menu không hiển thị
- 9. Hiển thị chuỗi là thành phần React
- 10. Sự kiện khóa xử lý Android trong khi menu hiển thị
- 11. Hiển thị sự kiện cho JTextField trong Java?
- 12. React.js Hiển thị Serverside và Trình xử lý sự kiện
- 13. EKEventViewController không hiển thị chi tiết sự kiện
- 14. Giám sát sự kiện hiển thị nguồn trên Windows XP
- 15. hiển thị có điều kiện các dạng phần tử html
- 16. Bắt sự kiện cuộn khi tràn: phần tử bị ẩn
- 17. Ruby on Rails: có điều kiện hiển thị một phần
- 18. Các thành phần phản ứng không hiển thị
- 19. Thành phần phản ứng không hiển thị lại sau khi thay đổi đạo cụ
- 20. Tại sao một số thành phần tiện ích không hiển thị khi được nhúng trong iBook?
- 21. jQuery Fullcalendar không hiển thị các sự kiện trong IE
- 22. Hiển thị MessageBox trên MouseDown ăn lên sự kiện MouseUp
- 23. Sự kiện hiển thị cửa sổ trong WPF?
- 24. Các thành phần hiển thị có điều kiện với Dao cạo
- 25. có điều kiện hiển thị phần tử sử dụng Aurelia
- 26. Dữ liệu theo dõi sự kiện - Thời gian hiển thị?
- 27. Thành phần radio chia sẻ Vuejs không được chọn khi hiển thị
- 28. Lịch đầy đủ hiển thị các sự kiện cả ngày
- 29. Sự kiện nào được kích hoạt khi UserControl được hiển thị?
- 30. Có sự kiện nào bị sa thải khi Android View hiển thị trong ứng dụng không?
Nếu đây là điều khiển tab bạn đã triển khai, chắc chắn bạn có thể thêm trình phát sự kiện và phát ra ở cùng một nơi bạn thay đổi tab? – Seer
Tôi cũng sử dụng điều khiển tab của Primeng và sự kiện duy nhất tồn tại trước khi thay đổi, vì vậy điều khiển chưa hiển thị tại thời điểm này: ( – Shimrod