Nâng cao trải nghiệm người dùng với các liên kết bật lên tùy chỉnh trong SPFx
Trong quá trình phát triển SharePoint hiện đại, việc sử dụng PnP Modern Search WebPart (SPFx) để cung cấp kết quả tìm kiếm có thể định cấu hình có thể cải thiện đáng kể trải nghiệm người dùng. Kiểm soát cách mở liên kết là một tính năng phổ biến của các nhà phát triển, đặc biệt là với bố cục "Danh sách chi tiết". Thông thường, các liên kết sẽ mở trong một tab mới, nhưng nếu chúng ta muốn mở chúng trong cửa sổ bật lên thì sao?
Trong bài đăng này, chúng ta sẽ xem xét cách triển khai chức năng này bằng cách thay đổi hành vi liên kết của WebPart Tìm kiếm Hiện đại PnP. Thay vì mở kết quả tìm kiếm trong tab mới, chúng tôi sẽ hướng dẫn cách buộc liên kết mở trong cửa sổ bật lên tùy chỉnh, mang lại trải nghiệm người dùng tích hợp hơn.
Thử thách nảy sinh khi bạn sử dụng một công thức như ``, mặc định là một tab mới. Tuy nhiên, bằng cách sử dụng JavaScript, chúng tôi có thể ghi đè hành vi này và mở liên kết trong cửa sổ bật lên được kiểm soát. Điều này cho phép linh hoạt hơn trong việc hiển thị nội dung trong cùng một phiên duyệt.
Yêu cầu | Ví dụ về sử dụng |
---|---|
window.open() | Lệnh này sẽ mở một cửa sổ hoặc tab trình duyệt mới. Phương pháp này sẽ mở một cửa sổ bật lên với các kích thước và thuộc tính nhất định, chẳng hạn như chiều rộng, chiều cao và thanh cuộn. |
event.preventDefault() | Ngăn chặn hành vi mặc định của liên kết được nhấp vào, đó là mở URL trong cùng một tab hoặc tab mới. Điều này cho phép chúng tôi tùy chỉnh cách hoạt động của liên kết, chẳng hạn như mở một cửa sổ bật lên. |
querySelectorAll() | Thuộc tính data-popup chọn tất cả các phần tử neo (). Phương thức này trả về một NodeList, cho phép chúng ta áp dụng trình xử lý sự kiện cho một số thành phần cùng một lúc. |
forEach() | Mỗi mục trong NodeList do querySelectorAll() tạo ra sẽ nhận được một hành động (ví dụ: đính kèm trình xử lý sự kiện). Điều này áp dụng cho việc quản lý nhiều thành phần liên kết động trong PnP Modern Search. |
addEventListener() | Kỹ thuật này thêm trình xử lý sự kiện nhấp chuột vào mỗi liên kết kích hoạt hàm openInPopup(). Nó là cần thiết để ghi đè hành vi nhấp chuột mặc định. |
import { override } | Trình trang trí này là một phần của SharePoint Framework (SPFx) và được sử dụng để ghi đè hành vi mặc định của SPFx WebParts. Nó cho phép thực hiện các tùy chỉnh cụ thể, chẳng hạn như chèn JavaScript để cung cấp chức năng bật lên. |
@override | Trong SPFx, trình trang trí cho biết rằng một phương thức hoặc thuộc tính sẽ ghi đè chức năng. Điều này là cần thiết khi sửa đổi hành vi của các thành phần SharePoint. |
spyOn() | Giám sát các cuộc gọi chức năng trong quá trình thử nghiệm đơn vị với Jasmine. Trong trường hợp này, nó được sử dụng với window.open() để đảm bảo rằng cửa sổ bật lên được khởi chạy phù hợp trong quá trình thử nghiệm. |
expect() | Lệnh này được sử dụng để kiểm tra đơn vị trong Jasmine. Nó kiểm tra xem window.open() đã được gọi với các đối số chính xác hay chưa, đảm bảo rằng cửa sổ bật lên xuất hiện với cài đặt mong muốn. |
Tìm hiểu giải pháp cửa sổ bật lên trong SPFx
Giải pháp 1: Sử dụng JavaScript `window.open` để tạo cửa sổ bật lên
<script>
function openInPopup(url) {
// Define popup window features
const features = 'width=800,height=600,resizable=yes,scrollbars=yes';
// Open URL in popup
window.open(url, '_blank', features);
}
// Override link behavior
document.querySelectorAll('a[data-popup="true"]').forEach(function (link) {
link.addEventListener('click', function (event) {
event.preventDefault(); // Prevent default link behavior
openInPopup(this.href); // Open in popup
});
});
</script>
// HTML for the link:
<a href="{{slot item @root.slots.PreviewUrl}}" data-popup="true" style="color: {{@root.theme.semanticColors.link}}">
{{slot item @root.slots.Destination}}
</a>
Giải pháp 2: Thêm JavaScript nội tuyến trực tiếp vào Thẻ liên kết
<a href="{{slot item @root.slots.PreviewUrl}}"
onclick="event.preventDefault(); window.open(this.href, '_blank', 'width=800,height=600');"
style="color: {{@root.theme.semanticColors.link}}">
{{slot item @root.slots.Destination}}
</a>
// The window.open parameters define the size and behavior of the popup.
Giải pháp 3: Phương pháp tiếp cận phụ trợ bằng cách sử dụng SPFx với tính năng chèn JavaScript
import { override } from '@microsoft/decorators';
import { BaseClientSideWebPart } from '@microsoft/sp-webpart-base';
export default class PopupWebPart extends BaseClientSideWebPart {
@override
public render(): void {
this.domElement.innerHTML = `
<a href="{{slot item @root.slots.PreviewUrl}}" onclick="openPopup(this.href)">
{{slot item @root.slots.Destination}}
</a>
`;
}
}
function openPopup(url: string): void {
window.open(url, '_blank', 'width=800,height=600,resizable=yes');
}
Kiểm tra đơn vị về hành vi bật lên của JavaScript
describe('Popup Functionality', function() {
it('should open the link in a popup window', function() {
spyOn(window, 'open');
const testUrl = 'http://example.com';
openInPopup(testUrl);
expect(window.open).toHaveBeenCalledWith(testUrl, '_blank', jasmine.any(String));
});
});
Khám phá Xử lý sự kiện và Chèn JavaScript động trong SPFx
Những điểm chính cần rút ra để triển khai Windows Popup trong SPFx
Tài liệu tham khảo và tài nguyên
- Thông tin liên quan đến PnP Modern Search WebPart (SPFx) và tùy chỉnh hành vi liên kết được lấy từ tài liệu chính thức. Để biết thêm chi tiết, hãy truy cập Kho lưu trữ GitHub tìm kiếm hiện đại của PnP .
- Hướng dẫn sử dụng các phương thức JavaScript như window.open() và trình xử lý sự kiện được tham chiếu từ Tài liệu web MDN cho JavaScript.
- Thông tin chi tiết về các tùy chỉnh SharePoint Framework (SPFx), bao gồm cả tính năng chèn JavaScript và @override, có thể tìm thấy trong Tổng quan về khung SharePoint .