7

Thực tiễn tốt nhất để tạo hộp thoại phương thức với nội dung động, tương phản với hộp thoại không có nội dung động.Thực tiễn tốt nhất cho hộp thoại phương thức góc

Ví dụ: Chúng tôi có một số biểu mẫu phương thức chấp nhận danh sách các yếu tố biểu mẫu và đã gửi/hủy. Ngoài ra, còn có các hộp thoại phương thức chỉ hiển thị loại hoạt động xác nhận/ok.

Tôi đã thấy rất nhiều người nói rằng các hộp thoại phải là các dịch vụ được chuyển vào bộ điều khiển, nhưng dường như với tôi rằng các dịch vụ không được hiển thị các thành phần giao diện người dùng và thao tác DOM.

Phương pháp hay nhất để lắp ráp hai loại hộp thoại này là gì? Cảm ơn.

Trả lời

2

Vì hộp thoại là các thành phần DOM nên có lẽ chúng là chỉ thị. Bạn có thể xây dựng các phần tử DOM của phương thức bên trong chỉ thị hoặc đặt các phần tử trên trang html chính ẩn và thôi ẩn chúng khỏi chỉ thị. Nếu bạn không cô lập phạm vi của chỉ thị, bạn chỉ có thể tham khảo phạm vi điều khiển (trừ khi bạn ở trong phạm vi con) từ chỉ thị.

Nội dung động và tĩnh không phải là nhiều điểm quyết định IMO. Vì bạn có quyền truy cập vào phạm vi từ bên trong chỉ thị, bạn có thể truy cập vào bất kỳ thứ gì bạn cần từ phạm vi được kế thừa.

+0

Tôi thích phương pháp này tốt nhất. Thậm chí tốt hơn, ai đó đã dành thời gian để triển khai cơ bản bạn có thể bắt đầu từ: https://github.com/adamalbrecht/ngModal – joescii

6

Giao diện người dùng góc Boostrap cung cấp dịch vụ - $dialog - có thể được tiêm bất cứ nơi nào bạn cần sử dụng hộp thoại. Dịch vụ đó có hai phương pháp chính: dialogmessageBox. Trước đây được sử dụng để tạo ra một hộp thoại với nội dung động và sau đó để tạo ra một hộp thông điệp với một tiêu đề, một tin nhắn và một tập hợp các nút. Cả hai đều trả về một lời hứa để bạn có thể xử lý kết quả của nó, khi nó có sẵn.

Tôi nghĩ rằng cách tiếp cận này hoạt động tốt, bởi vì nó phù hợp với cách tự nhiên, bắt buộc để xử lý các hộp thoại. Ví dụ, nếu người dùng nhấp vào một nút và bạn muốn hiển thị một hộp thoại và sau đó xử lý kết quả của nó, các mã có thể trông như thế này:

$scope.doSomething = function() { 
    $dialog.dialog().open().then(function(result) { 
     if (result === OK) { 
      // Process OK 
     } 
     else { 
      // Process anything else 
     } 
    }); 
} 

Bạn thực sự có thể sử dụng chỉ thị để làm như vậy, và có lẽ nó có vẻ đúng cách để làm điều đó vì có thao tác DOM có liên quan, nhưng tôi nghĩ nó sẽ rất khó xử để xử lý nó. Ví dụ trước sẽ có dạng như sau:

<dialog visible="dialogVisible" callback="dialogCallback()"></dialog> 

... 

$scope.doSomething = function() { 
    $scope.dialogVisible = true; 
} 

$scope.dialogCallback = function(result) { 
    if (result === OK) { 
     // Process OK 
    } 
    else { 
     // Process anything else 
    } 
} 

IMO, ví dụ đầu tiên trông đẹp hơn và dễ hiểu hơn.

1

Một thiết kế khá đơn giản mà hoạt động tốt là:

  1. Có một "thoại modal" div như ở đâu đó trong html của bạn. Nó sẽ thường tuyệt đối, lấy tất cả chiều rộng và chiều cao màn hình (thường là một div mờ tối với div hộp thoại nhỏ hơn vào nó) và không hiển thị theo mặc định (sử dụng ng-show để hiển thị nó theo điều kiện, tùy thuộc vào sự tồn tại của modals hay không)
  2. Khai báo bộ điều khiển lắng nghe sự kiện thoại ("dialogShow", "dialogClose", v.v.) và thay đổi giá trị phạm vi "currentModal" $ khi nhận chúng. Theo thiết lập tình trạng ng-show ở bước trước, phương thức này sẽ hiển thị hoặc thay đổi hoặc biến mất (nếu được đặt thành null/undefined)
  3. Sự kiện hộp thoại kích hoạt từ bất kỳ đâu trong ứng dụng của bạn, sử dụng chương trình phát sóng.

Cải tiến bao gồm:

  • Sự kiện thông số thuộc tính (cài đặt khi kích hoạt và nhận bởi bộ điều khiển) có thể bao gồm tiêu đề, tin nhắn, hình ảnh, thậm chí html (để được làm vệ sinh), các nút, callbacks cho những các nút, thời lượng hiển thị (thông qua $ timeout)
  • Hãy nhớ một chồng các cảnh báo đã nhận. Khi một tài khoản bị đóng, lần chờ xử lý tiếp theo hiển thị
Các vấn đề liên quan