แสดงป๊อปอัปด้วยวิธีที่หรูหราที่สุด


178

ฉันมีแอพ AngularJS นี้ ทุกอย่างใช้ได้ดี

ตอนนี้ฉันต้องแสดงป๊อปอัปที่แตกต่างกันเมื่อเงื่อนไขเฉพาะกลายเป็นจริงและฉันสงสัยว่าอะไรจะเป็นวิธีที่ดีที่สุดในการดำเนินการต่อ

ขณะนี้ฉันกำลังประเมินสองตัวเลือก แต่ฉันเปิดรับตัวเลือกอื่นอย่างแน่นอน


ตัวเลือกที่ 1

ฉันสามารถสร้างองค์ประกอบ HTML ใหม่สำหรับป๊อปอัปและผนวกเข้ากับ DOM โดยตรงจากคอนโทรลเลอร์

สิ่งนี้จะทำลายรูปแบบการออกแบบ MVC ฉันไม่พอใจกับวิธีนี้


ตัวเลือก 2

ฉันสามารถใส่รหัสสำหรับป๊อปอัปทั้งหมดในไฟล์ HTML คงที่ได้ตลอดเวลา จากนั้นใช้ngShowฉันสามารถซ่อน / แสดงเฉพาะป๊อปอัปที่ถูกต้องเท่านั้น

ตัวเลือกนี้ไม่สามารถปรับขนาดได้จริงๆ


ดังนั้นฉันค่อนข้างมั่นใจว่าจะต้องมีวิธีที่ดีกว่าในการบรรลุสิ่งที่ฉันต้องการ


หลายวิธีควบคุมเพื่อใช้ HTML defintiely วิธีที่ไม่ดีดูที่ UI Bootstrap Modal angular-ui.github.com/bootstrap/#/modal
charlietfl

1
เอกสารของ AngularJS อธิบายวิธีจัดการป๊อปอัปเล็กน้อยในส่วน ' ทำความเข้าใจกับการสรุปและขอบเขต ' หวังว่านี่จะช่วยได้
Ivan Ferrer Villa

ถ้าคุณอยากที่จะไต่กับป๊อปอัพแล้วตรวจสอบpopscript
Raj Nathani

คำตอบ:


88

จากประสบการณ์ของฉันกับโมดัล AngularJS จนถึงตอนนี้ฉันเชื่อว่าวิธีการที่หรูหราที่สุดคือบริการเฉพาะที่เราสามารถให้เทมเพลตบางส่วน (HTML) ที่จะแสดงเป็นโมดัล

เมื่อเราคิดว่ามันเป็น modals เป็นเส้นทางของ AngularJS แต่เพิ่งปรากฏในป๊อปอัปของ modal

โครงการบู๊ตสแตรป AngularUI ( http://angular-ui.github.com/bootstrap/ ) มี$modalบริการที่ยอดเยี่ยม(เคยถูกเรียกว่า $ dialog ก่อนรุ่น 0.6.0) ซึ่งเป็นการใช้งานบริการเพื่อแสดงเนื้อหาบางส่วนเป็น ป๊อปอัพเป็นกิริยาช่วย


10
$ dialog ตอนนี้ $ modal
Sangram Singh

1
@ pkozlowski.opensource ฉันชอบวิธีการของ ui-bootstrap แต่ฉันไม่สามารถแปลงเนื้อหาด้วยคำกริยา ฉันได้ทำการวิจัยแล้วและเห็นว่าคนอื่นมีปัญหานี้เช่นกัน
jusopi

2
weblogs.asp.net/dwahlin/building-an-angularjs-modal-serviceฉันพบว่าบทความนี้มีประโยชน์มาก
JenonD

เพียงกล่าวถึงบริการไม่ควรเข้าถึง DOM คำสั่งเป็นสถานที่สำหรับสิ่งนี้
superluminary

1
@superluminary นี่เป็นกฎทั่วไปที่ดีที่จะปฏิบัติตาม แต่มันก็เป็นพระเจ้าที่จะรู้ว่าทำไมกฎบางอย่างกำลังดำเนินไปและเข้าใจเมื่อกฎดังกล่าวสามารถ (หรือควร!) ฉันเชื่อว่า modals / tooltips และสิ่งที่คล้ายกันเป็นข้อยกเว้นของกฎ ในระยะสั้น: หนึ่งต้องรู้กฎ แต่ยังเข้าใจบริบทที่ใช้ / ไม่ใช้
pkozlowski.opensource

29

มันตลกเพราะฉันเรียน Angular ด้วยตัวเองและดูวิดีโอจากช่องของพวกเขาใน Youtube ผู้พูดกล่าวถึงปัญหาที่แน่นอนของคุณในวิดีโอนี้https://www.youtube.com/watch?v=ZhfUv0spHCY#t=1681รอบเครื่องหมาย 28:30 นาที

มันลงมาเพื่อวางชิ้นส่วนของรหัสนั้นในบริการแทนที่จะเป็นตัวควบคุม

ฉันเดาว่าจะฉีดองค์ประกอบป๊อปอัปใหม่เข้าไปใน DOM และจัดการแยกต่างหากแทนที่จะแสดงและซ่อนองค์ประกอบเดียวกัน วิธีนี้คุณสามารถมีป๊อปอัปได้หลายรายการ

วิดีโอทั้งหมดน่าสนใจมากที่จะดูเช่นกัน :-)


2
Misko เป็นเมล็ดพันธุ์ของเชิงมุม! (bwa haha) สรรพสินค้าอย่างจริงจัง ถือว่าคำพูดของเขาเป็นแหล่งที่มาที่ชัดเจนสำหรับเชิงมุม
ดาดฟ้า

14
  • สร้างคำสั่ง 'ป๊อปอัป' และใช้กับคอนเทนเนอร์ของเนื้อหาป๊อปอัป
  • ในคำสั่งให้ตัดเนื้อหาใน div ตำแหน่งที่แน่นอนพร้อมกับ div mask ด้านล่าง
  • คุณสามารถย้าย 2 divs ในแผนผัง DOM ได้ตามต้องการจากภายในคำสั่ง รหัส UI ใด ๆ ก็โอเคในคำสั่งรวมถึงรหัสเพื่อวางตำแหน่งป๊อปอัพที่กึ่งกลางหน้าจอ
  • สร้างและผูกแฟล็กบูลีนกับตัวควบคุม ธงนี้จะควบคุมการมองเห็น
  • สร้างตัวแปรขอบเขตที่เชื่อมโยงกับฟังก์ชัน OK / Cancel เป็นต้น

การแก้ไขเพื่อเพิ่มตัวอย่างระดับสูง (ไม่ทำงาน)

<div id='popup1-content' popup='showPopup1'>
  ....
  ....
</div>


<div id='popup2-content' popup='showPopup2'>
  ....
  ....
</div>



.directive('popup', function() {
  var p = {
      link : function(scope, iElement, iAttrs){
           //code to wrap the div (iElement) with a abs pos div (parentDiv)
          // code to add a mask layer div behind 
          // if the parent is already there, then skip adding it again.
         //use jquery ui to make it dragable etc.
          scope.watch(showPopup, function(newVal, oldVal){
               if(newVal === true){
                   $(parentDiv).show();
                 } 
              else{
                 $(parentDiv).hide();
                }
          });
      }


   }
  return p;
});

$ watch แทน 'watch' มันจะไม่เป็น 'ป๊อปอัพ' แทนที่จะเป็น 'showPopup' ด้วยscope.watch(showPopup, function(newVal, oldVal){หรือไม่
Sangram Singh

14

ดู http://adamalbrecht.com/2013/12/12/creating-a-simple-modal-dialog-directive-in-angular-js/ สำหรับวิธีง่ายๆในการทำกล่องโต้ตอบโมดัลกับ Angular และไม่จำเป็นต้องใช้ bootstrap

แก้ไข: ตั้งแต่ฉันใช้ ng-dialog จากhttp://likeastore.github.io/ngDialogซึ่งยืดหยุ่นได้และไม่มีการอ้างอิงใด ๆ


1
ฉันเพิ่งวิ่งอย่างรวดเร็วด้วยวิธีนี้เท่านั้นที่จะตระหนักว่านี่เป็นวิธีที่ดีสำหรับวิธีป๊อปอัพ / โมดอลเดียวอย่างไรก็ตามคิดว่า UX นี้โดยเฉพาะ: พูดว่าลูกค้ากำลังสั่งซื้อรายการและ UI แสดงป๊อปอัพคำสั่งยืนยัน (ดังนั้นเรา 'ครอบครอง' ป๊อปอัปของอดัมที่มีเนื้อหา) ตอนนี้เราคลิกส่งหรือซื้อหรืออะไรก็ตามจากป๊อปอัพนั้นและมีข้อผิดพลาดที่ผู้ใช้จำเป็นต้องแก้ไขคำสั่งนั้นในหน้าจอก่อนหน้า ฉันต้องการแสดงข้อผิดพลาดนั้นในป๊อปอัพอื่นที่ระดับบนสุด วิธีการนี้ไม่ได้ช่วยในเรื่องนี้ฉันไม่เชื่อ
jusopi

3
จริง แต่ฉันคิดว่าป๊อปอัปมากกว่าหนึ่งรายการอาจเป็น UI ที่ไม่ดี
Nik Dow

ปลั๊กอินคือคำตอบที่ฉันกำลังมองหา!
Andres Felipe

7

Angular-ui มาพร้อมกับไดอะล็อก directive ใช้มันและตั้งค่า templateurl เป็นหน้าอะไรก็ตามที่คุณต้องการรวมนั่นเป็นวิธีที่ดีที่สุดและฉันก็ใช้มันในโครงการของฉันเช่นกัน คุณสามารถส่งผ่านพารามิเตอร์อื่น ๆ สำหรับการโต้ตอบตามต้องการ


5
angular-bootstrap 0.6 เป็นต้นไปได้แทนที่ $ dialog ด้วย $ modal นั่นหมายความว่าคุณต้องเปลี่ยนรหัสทั้งหมดที่ใช้ $ dialog เนื่องจากไม่รองรับและเขียนเป็น $ modal
Mohammad Umair Khan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.