AngularJS ใช้สำหรับแอปพลิเคชันหน้าเดียว (SPA) หรือไม่


201

เรากำลังดูตัวเลือกในการสร้างส่วนหน้าของแอปพลิเคชันที่เรากำลังสร้างและพยายามประเมินเครื่องมือที่จะทำงานให้เราและให้แพลตฟอร์มที่ดีที่สุดแก่เราในการก้าวไปข้างหน้า

นี่เป็นโครงการNode.js แผนเริ่มต้นของเราคือการใช้ Express และไปตามเส้นทางนั้น แต่เราตัดสินใจว่าก่อนที่เราจะเริ่มขั้นตอนนี้เราควรตรวจสอบสิ่งที่อยู่ข้างนอก แอปพลิเคชันของเรามีหลายพื้นที่ซึ่งเราไม่เชื่อว่าเหมาะสมกับรูปแบบหน้าเดียวที่เกี่ยวข้องกับมุมมองของแอปพลิเคชัน แต่ไม่ใช่จากมุมมอง

เราได้เห็นกรอบบางอย่างที่เราสามารถใช้เพื่อสร้างลูกค้าเช่นBackbone.js , Meteorและอื่น ๆ รวมถึง AngularJS

นี่อาจเป็นคำถามที่ค่อนข้างชัดเจน แต่เราไม่สามารถถอดรหัสได้หาก AngularJS นั้นใช้สำหรับแอปพลิเคชันหน้าเดียวหรือสามารถใช้กับแอปพลิเคชันที่มีหลายหน้าเช่น Express ได้


อัปเดต 17 กรกฎาคม 2556 เพียงเพื่อให้ผู้คนในวงฉันจะปรับปรุงคำถามนี้เมื่อเราผ่านกระบวนการ ตอนนี้เรากำลังจะสร้างทุกอย่างร่วมกันและเราจะเห็นว่าประสิทธิภาพนั้นดีแค่ไหน เราได้ติดต่อกับบางคนที่มีคุณสมบัติตรงกับ AngularJS มากกว่าเราและตั้งคำถามเกี่ยวกับการแยกแอปพลิเคชันขนาดใหญ่ที่แบ่งปันบริบท แต่อาจมีขนาดใหญ่เกินไปที่จะทำงานในหน้าเดียว

ฉันทามติคือเราสามารถให้บริการหน้าคงที่หลายหน้าและสร้างแอปพลิเคชัน AngularJS ที่ทำงานกับหน้าเหล่านั้นเท่านั้นสร้างคอลเลกชันของ SPA อย่างมีประสิทธิภาพและเชื่อมโยงแอปพลิเคชันเหล่านั้นเข้าด้วยกันโดยใช้การเชื่อมโยงมาตรฐาน ตอนนี้กรณีการใช้งานของเรานั้นเฉพาะเจาะจงมากเพราะโซลูชันของเรามีหลายแอปพลิเคชันและอย่างที่ฉันบอกว่าเราจะลองใช้รหัสฐานเดียวก่อนและปรับให้เหมาะสมจากตรงนั้น

อัปเดต 18 มิถุนายน 2559โครงการพังหน้าผาดังนั้นเราไม่เคยมีรอบที่จะทำอะไรมากเกินไป เราได้หยิบมันขึ้นมาอีกครั้งเมื่อไม่นานมานี้ แต่ไม่ได้ใช้แองกูลาร์และใช้การตอบโต้แทน เรายังคงใช้สถาปัตยกรรมที่ระบุไว้ในการอัปเดตก่อนหน้านี้ที่เราใช้แอปด่วนและตนเองมีแอพดังนั้นเราจึงมี/chatเส้นทางด่วนที่ให้บริการแอปแชทปฏิกิริยาของเราเรามีเส้นทางอื่น/projectsที่ให้บริการแอปโครงการและ เป็นต้น วิธีที่เรามองมันคือแต่ละแอพเป็นรูทรวมในแง่ของชุดคุณสมบัติของมันมันจะต้องสามารถใช้งานแบบสแตนด์อโลนเพื่อที่จะได้รับการพิจารณาแอพในตัวเอง ในทางเทคนิคแล้วข้อมูลทั้งหมดนั้นอยู่ที่นั่นเพียงแค่พื้นฐานด่วนและรสชาติของแอปฝั่งไคลเอ็นต์ที่สร้างคุณงามความดีที่คุณต้องการใช้


5
แล้วมันจะเป็นอย่างไร ฉันกำลังพยายามหาวิธีย้ายแอพพลิเคชั่น ASP.NET ขนาด 50+ หน้าไปยังแอพพลิเคชั่น HTML + Javascript + REST บริสุทธิ์และฉันไม่เข้าใจว่ามันจะทำงานเป็นสปาได้อย่างไร
เกร็ก

1
เราต้องเปลี่ยนไปทำอย่างอื่น จากการอภิปรายที่เรามีและจะได้รับอีกครั้งเนื่องจากการเริ่มต้นครั้งนี้เป็นอีกครั้งและสปาสามารถเป็นฟันเฟืองที่เน้นในเครื่องที่ใหญ่กว่ามาก ดังนั้นแปลอินสแตนซ์ของเราให้กับคุณ (เราใช้โหนดบริสุทธิ์กับ express) หากคุณต้องการอยู่ใน stack familar (.Net) คุณสามารถใช้ MVC เป็นฐานความช่วยเหลือของคุณและใช้เชิงมุมในมุมมองเพื่อเพิ่มเนื้อหาแบบไดนามิก (แต่ละคุณลักษณะ) . หากคุณไม่สามารถย่อแอปลงได้การใช้ตรรกะ 50 หน้าในหน้าเดียวอาจทำให้หายใจไม่ออก
Modika

1
สิ่งที่ทำให้แต่ละส่วน (เช่นผู้ใช้ข่าวผลิตภัณฑ์ ฯลฯ ) เป็นสปาในสิทธิ์ของตนเอง แต่โดยรวมจะเป็นแอปของคุณ
Modika

1
เยี่ยมมากขอบคุณ มีรหัสเฉพาะที่ต้องทำเพื่อผูกสปาที่แตกต่างกันหรือไม่ หรือเพียงแค่ลิงค์ปกติ?
เกร็ก

1
@Greg จากความรู้ที่ จำกัด ของเราจนถึงขณะนี้เนื่องจากแอปเหล่านี้เป็นหลักในการเชื่อมโยงมาตรฐานที่ถูกต้องของตัวเองจะใช้งานได้อย่างเห็นได้ชัดว่ามันอาจไม่ใช่สิ่งที่ตรงไปตรงมา ข้อมูลที่แชร์เช่นอาจและข้อมูลประจำตัวหรือโปรไฟล์หากแอปนั้นอยู่หลังรูปแบบการเข้าสู่ระบบ แอปของเราจะเชื่อมโยงอย่างแน่นหนากับ API ของเราและเนื่องจากเรากำลังสร้างแอปที่เชื่อถือได้เรากำลังใช้ oauth เพื่อปกป้องคำขอแต่ละอันฉันคิดว่า Trello ทำสิ่งที่คล้ายกัน แต่ฉันอาจผิด
Modika

คำตอบ:


216

ไม่ใช่เลย. คุณสามารถใช้ Angular เพื่อสร้างแอพที่หลากหลาย การกำหนดเส้นทางฝั่งไคลเอ็นต์เป็นเพียงส่วนเล็ก ๆ

คุณมีรายการคุณลักษณะจำนวนมากที่จะเป็นประโยชน์ต่อคุณนอกการกำหนดเส้นทางฝั่งไคลเอ็นต์:

  • ผูกพันสองทาง
  • แม่แบบ
  • การจัดรูปแบบสกุลเงิน
  • pluralization
  • การควบคุมนำมาใช้ใหม่
  • การจัดการ API สงบ
  • การจัดการ AJAX
  • modularization
  • ฉีดพึ่งพา

มันบ้าที่จะคิดว่าสิ่งเหล่านี้ "สามารถใช้ในแอพหน้าเดียว" เท่านั้น แน่นอนว่าไม่ใช่ .. มันก็เหมือนกับการพูดว่า "Jquery สำหรับโครงการที่มีภาพเคลื่อนไหวเท่านั้น"

ถ้ามันเหมาะกับโครงการของคุณใช้มัน


42
อีกจุดที่กล่าวถึงคือ Angular ไม่จำเป็นต้องใช้สำหรับเต็มหน้า - มันสามารถรวมเข้ากับระบบที่มีอยู่เพื่อสร้างส่วนประกอบเช่นวิดเจ็ตหรือปลั๊กอินที่ซับซ้อนภายในแอปพลิเคชันดั้งเดิม
Alex Osborn

2
@ เนื้อขอบคุณสำหรับคำตอบมันสมเหตุสมผล แต่สิ่งที่เราดิ้นรนในการค้นหาคือ "วิธี" ที่เราใช้สร้างแอพหลายหน้าซึ่งเป็นสาเหตุที่คำถามถูกโพสต์ซึ่งเป็นคำถามที่แตกต่างดังนั้นคำตอบของคุณจึงเป็นจริง ได้รับการยอมรับ แต่เช่นเราสามารถใช้ angular.js กับ express.js หรือเป็นอะไรที่ทำให้เสียเวลาและเกิดความยุ่งยาก
Modika

Angular with Express นั้นเกือบจะสมบูรณ์แบบแล้ว! มันง่ายมากที่จะสร้าง RESTful API ด้วย Express ที่คุณสามารถใช้งานได้จากแอปพลิเคชันเชิงมุมของคุณ Google NodeJS Express RESTful API และบริการ $ resource และ $ http ของ Angular หลังจากนั้นเพียงเริ่มต้นแบบและเล่นกับมัน ฉันคิดว่าคุณอาจพบว่าคุณคิดมาก / กังวลมากเกินไปเกี่ยวกับ "วิธี" เมื่อคุณเห็นว่าพวกเขาทำงานร่วมกันได้ดีเพียงใด
Ben Lesh

@ เนื้อ, ขอโทษที่กลับมาช้า เรามี REST / Hypermedia API ที่สร้างขึ้นโดยใช้ Restify แล้วฉันคิดว่าเราต้องหาวิธีที่เป็นระเบียบเพื่อเชื่อมโยง "แอพ" ที่แยกจากกันซึ่งสร้างขึ้นด้วยกันอย่างใดอย่างหนึ่ง
Modika

@Modika คุณสามารถค้นหาแหล่งข้อมูลที่ดีหรือมีข้อมูลเชิงลึกที่ดีสำหรับแอพหลายหน้าได้หรือไม่?
dre

16

ฉันต่อสู้กับ "วิธี" ในตอนแรกกับ Angular เช่นกัน แล้ววันหนึ่งมันก็เริ่มกับฉัน: "มันยังคงเป็นจาวาสคริปต์" มีตัวอย่างมากมายเกี่ยวกับการซื้อของ Angular (หนึ่งในรายการโปรดของฉันพร้อมกับหนังสือhttps://github.com/angular-app/angular-app ) สิ่งที่สำคัญที่สุดที่ต้องจำก็คือโหลดไฟล์ js เช่นเดียวกับที่คุณทำในโครงการอื่น สิ่งที่คุณต้องทำคือตรวจสอบให้แน่ใจว่าหน้าต่างๆอ้างอิงวัตถุ Angular ที่ถูกต้อง (ตัวควบคุมมุมมอง ฯลฯ ) และคุณปิดและทำงานอยู่ ฉันหวังว่ามันจะสมเหตุสมผล แต่คำตอบนั้นง่ายมากฉันมองข้ามไป


6

บางทีประสบการณ์ของฉันอาจเป็นประโยชน์กับใครบางคน เราแบ่งโครงการอย่างมีเหตุผล หนึ่งสปาที่เราใช้สำหรับฟีดอีกอันหนึ่งใช้งานกับแผนที่อีกอันหนึ่งสำหรับแก้ไขโปรไฟล์ผู้ใช้และอื่น ๆ ตัวอย่างเช่นเรามีแอพสามตัวคือฟีดผู้ใช้และแผนที่ ฉันใช้มันใน URL ที่แยกกันเช่นนี้

https://host/feed/#/top/
https://host/user/#/edit/1/
https://host/map/favorites/#/add/

แต่ละแอปพลิเคชันเหล่านี้มีการแมปเส้นทางท้องถิ่นของตนเองระหว่างรัฐในแอปพลิเคชัน ฉันคิดว่ามันเป็นแนวปฏิบัติที่ดีเพราะแต่ละแอปพลิเคชันทำงานเฉพาะกับบริบทของตัวเองและการพึ่งพาโหลดที่มันต้องการจริงๆ นอกจากนี้ยังเป็นการฝึกฝนที่ดีมากสำหรับการดีบักและกระบวนการรวม

แน่นอนว่าคุณสามารถผสมผสานแอพ SPA ได้อย่างง่ายดายตัวอย่างเช่นฟีดจะมี URL ด้วยแอปพลิเคชัน angularjs แอพผู้ใช้ที่มีแท็กตอบโต้และแมปไปยังแอปพลิเคชัน backbone.js

ในการตอบคำถามของคุณ:

เชิงมุมไม่เพียง แต่สำหรับสปาเท่านั้นแองกูลาร์ยังเล่นได้ดีและรวดเร็วสำหรับแอพพลิเคชั่นสปา แต่ไม่มีใครรบกวนการสร้างแอพพลิเคชั่น MPA ของแอพพลิเคชั่นสปาที่หลากหลาย แต่คิดถึงสถาปัตยกรรม URL ของคุณอย่าลืมเกี่ยวกับ SEO ที่มีอยู่ในแอปพลิเคชันของคุณ

ฉันยังสนับสนุนความคิดนี้ด้วย:

โครงการและแอพต่างกันอย่างไร แอปเป็นเว็บแอปพลิเคชันที่ทำบางสิ่งเช่นระบบเว็บล็อกฐานข้อมูลบันทึกสาธารณะหรือแอพโพลง่าย ๆ โครงการคือชุดของการกำหนดค่าและแอพสำหรับเว็บไซต์เฉพาะ โครงการสามารถมีหลายแอพ แอปสามารถอยู่ในหลายโครงการ


3

หากคุณต้องการเพียงไม่กี่หน้ามีฐานข้อมูลลูกค้าฉันจะไปกับการทำให้เสียชื่อและ Javascript Namespacing

สิ่งที่น่าพิศวงเป็นสิ่งที่ดีโดยเฉพาะอย่างยิ่งถ้าคุณต้องการความเข้ากันได้แบบย้อนหลังที่ไม่ซับซ้อนและมีหน้าไปข้างหน้าค่อนข้างตรงไปตรงมา หากคุณใช้องค์ประกอบบุคคลที่สามการผูกแบบกำหนดเองของสิ่งที่น่าพิศวงนั้นตรงไปตรงมาและใช้งานได้ง่าย

Javascript namespacing ช่วยให้คุณสามารถแยกรหัสและจัดการได้

var myCo = myCo || {};
myCo.page = {
    init: function(){ ... },
    ...
}

และในแท็กสคริปต์หลังจากโหลดสคริปต์อื่นของคุณแล้ว

<script>
    myCo.init();
</script>

กุญแจสำคัญคือคุณใช้เครื่องมืออะไรก็ได้ที่คุณต้องการเมื่อคุณต้องการ ต้องการฐานข้อมูลหรือไม่ สิ่งที่น่าพิศวง (หรือสิ่งที่คุณต้องการ) ต้องการเส้นทาง? sammy.js (หรืออะไรก็ได้ที่คุณชอบ)

รหัสลูกค้าสามารถทำได้ง่ายหรือซับซ้อนตามที่คุณต้องการ ฉันพยายามรวม Angular เข้ากับเว็บไซต์ที่ซับซ้อนมากด้วยกรอบกรรมสิทธิ์ที่มีอยู่และมันก็เป็นฝันร้าย Angular นั้นยอดเยี่ยมถ้าคุณเริ่มต้นใหม่ แต่มันมีช่วงการเรียนรู้และล็อคคุณเข้าสู่กระบวนการทำงานที่แน่นมาก หากคุณไม่ปฏิบัติตามรหัสของคุณสามารถพันกันได้อย่างรวดเร็วจริงๆ


1

ฉันจะบอกว่า Angular เกินความจริงถ้าคุณแค่ต้องการพัฒนาสปา แน่นอนว่าถ้าคุณพร้อมที่จะพัฒนาแล้วล่ะก็ แต่ถ้าคุณยังใหม่กับกรอบและต้องพัฒนา SPA ฉันจะไปกับสิ่งที่ง่ายขึ้นด้วยจำนวน perks ของตัวเอง ผมขอแนะนำให้มองเข้าไปในVue.jsหรือAurelia.io

Vue.jsใช้การเชื่อมโยงข้อมูลแบบสองทาง, MVVM, ส่วนประกอบที่นำกลับมาใช้ใหม่, ง่ายและรวดเร็วในการรับรหัส, เขียนโค้ดน้อยลง ฯลฯ ซึ่งรวมเอาฟีเจอร์ที่ดีที่สุดของ Angular และ React

Aurelia.ioด้วยความซื่อสัตย์ฉันไม่รู้มากเลย แต่ฉันได้แอบมองไปรอบ ๆ และดูเหมือนว่าจะเป็นทางเลือกที่คุ้มค่า

ลิงค์:
https://vuejs.org/
http://aurelia.io/

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