ความแตกต่างระหว่างแองกูลาร์ - รูทและแองกูลาร์ - UI-router คืออะไร?


1080

ฉันวางแผนที่จะใช้AngularJSในแอปพลิเคชันขนาดใหญ่ของฉัน ดังนั้นฉันจึงอยู่ในขั้นตอนหาโมดูลที่เหมาะสมที่จะใช้

ความแตกต่างระหว่างโมดูล ngRoute (angular-route.js)และui-router (angular-ui-router.js)คืออะไร?

ในหลายบทความเมื่อngRouteจะใช้เส้นทางที่ถูกกำหนดค่าด้วย$ routeProvider แต่เมื่อนำมาใช้กับUI เตอร์เส้นทางการกำหนดค่ากับ$ stateProvider และ $

ฉันควรใช้โมดูลใดเพื่อความสามารถในการจัดการและการขยายที่ดีขึ้น


11
ไม่ต้องพูดถึงเราเตอร์ใหม่เชิงมุมใน 1.4+ และ 2.0
Zach Lysobey

คำตอบ:


1112

ui-routerเป็นโมดูลของบุคคลที่สามและมีประสิทธิภาพมาก รองรับทุกสิ่งที่ ngRoute ปกติสามารถทำได้รวมถึงฟังก์ชั่นพิเศษมากมาย

นี่คือเหตุผลทั่วไปบางประการที่เลือก ui-router มากกว่า ngRoute:

  • UI เตอร์ช่วยให้มุมมองที่ซ้อนกันและมุมมองหลายชื่อ สิ่งนี้มีประโยชน์มากกับแอพขนาดใหญ่ที่คุณอาจมีเพจที่สืบทอดมาจากส่วนอื่น ๆ

  • ui-router ช่วยให้คุณมีการเชื่อมโยงที่แข็งแกร่งชนิดระหว่างรัฐตามชื่อรัฐ เปลี่ยน URL ui-srefในสถานที่หนึ่งจะอัปเดตทุกเชื่อมโยงไปยังรัฐที่ว่าเมื่อคุณสร้างการเชื่อมโยงของคุณด้วย มีประโยชน์มากสำหรับโครงการขนาดใหญ่ที่อาจเปลี่ยน URL

  • นอกจากนี้ยังมีแนวคิดของมัณฑนากรซึ่งสามารถใช้เพื่ออนุญาตเส้นทางของคุณในการสร้างแบบไดนามิกตาม URL ที่พยายามเข้าถึง นี่อาจหมายความว่าคุณไม่จำเป็นต้องระบุเส้นทางทั้งหมดก่อนถึงมือ

  • รัฐช่วยให้คุณสามารถ map $stateParamsและเข้าถึงข้อมูลที่แตกต่างกันเกี่ยวกับสถานะที่แตกต่างกันและคุณสามารถส่งผ่านข้อมูลระหว่างรัฐผ่าน

  • คุณสามารถตรวจสอบว่าคุณอยู่ในสถานะหรือผู้ปกครองของรัฐในการปรับองค์ประกอบ UI (การเน้นการนำของรัฐในปัจจุบัน) ภายในแม่แบบของคุณผ่านทาง$stateให้โดย UI เราเตอร์ที่คุณสามารถสัมผัสผ่านการตั้งค่าไว้ในบน$rootScoperun

ในสาระสำคัญ ui-router เป็น ngRouter พร้อมคุณสมบัติเพิ่มเติมภายใต้แผ่นมันแตกต่างกันมาก คุณสมบัติเพิ่มเติมเหล่านี้มีประโยชน์มากสำหรับแอปพลิเคชันขนาดใหญ่

ข้อมูลมากกว่านี้:


134
โดยรวมนี่เป็นคำอธิบายที่ดีที่สุด แต่สำหรับประเด็นสำคัญข้อหนึ่ง: "โดยรวม ui-router เป็น ngRouter พร้อมคุณสมบัติเพิ่มเติม" มันเป็นพื้นฐานที่มากกว่านั้นngRouteเพียงแค่ให้คุณกำหนดตัวควบคุมและเทมเพลตให้กับเส้นทาง URL ในขณะที่นามธรรมขั้นพื้นฐานui.routerคือสภาวะซึ่งเป็นแนวคิดที่ทรงพลังกว่า
Nate Abele

23
มันอาจจะเกี่ยวข้องกับบางคนเพื่อชี้ให้เห็นความแตกต่างในขนาดไฟล์ในคำตอบ ณ ตอนนี้ngRoute: 35.9kB / 4.4kB / 2.5kB และui-router: 162.9kB / 30.4kB / 11.6kB (ไม่ จำกัด / ย่อ / ขยาย / gzipped)
Alex Ross

35
พวกเราเป็นห่วงอย่างจริงจังเกี่ยวกับ 162kb ในปี 2015?
ปลาดุก

27
ทำไมไม่ @Catfish มีหลายสถานที่ในโลกที่มีการเชื่อมต่ออินเทอร์เน็ตที่ไม่ดีกังวลว่ามันสำคัญมาก!
Bruno Casali

4
@tfrascaroli ผมไม่เห็นด้วย - ถ้าผู้ใช้มีการโหลดแอปของคุณเป็นครั้งแรกเวลาในการโหลดหน้ามีความสัมพันธ์อย่างยิ่งกับอัตราการตีกลับ ฉันจะพิจารณาค่าใช้จ่าย / ผลประโยชน์แน่นอนก่อนที่จะเพิ่มอีก 130kB ไปยังหน้า
Anthony Manning-Franklin

131

ngRouteเป็นโมดูลที่พัฒนาโดยทีม AngularJS ซึ่งก่อนหน้านี้เป็นส่วนหนึ่งของแกน AngularJS

ui-routerเป็นเฟรมเวิร์กที่สร้างขึ้นนอกโครงการ AngularJS เพื่อปรับปรุงและเพิ่มความสามารถในการกำหนดเส้นทาง

จาก UI-เราเตอร์เอกสาร :

AngularUI Router เป็นโครงร่างการเราต์สำหรับ AngularJS ซึ่งช่วยให้คุณสามารถจัดระเบียบส่วนต่าง ๆ ของอินเทอร์เฟซของคุณให้เป็นเครื่องสถานะ ซึ่งแตกต่างจากบริการ $ route ในแกนแองกูลาร์ซึ่งมีการจัดระเบียบเส้นทาง URL, UI-Router ถูกจัดระเบียบรอบรัฐซึ่งอาจมีเส้นทางเลือกเช่นเดียวกับพฤติกรรมอื่น ๆ ที่แนบมา

สถานะถูกผูกไว้กับมุมมองแบบซ้อนกันและขนานกันซึ่งอนุญาตให้คุณจัดการอินเทอร์เฟซของแอปพลิเคชันของคุณได้อย่างมีประสิทธิภาพ

ทั้งสองอย่างนั้นดีกว่าคุณจะต้องเลือกสิ่งที่เหมาะสมที่สุดสำหรับโครงการของคุณ

อย่างไรก็ตามหากคุณวางแผนที่จะมีมุมมองที่ซับซ้อนในแอปพลิเคชันของคุณและคุณต้องการจัดการกับแนวคิด "$ state" ฉันแนะนำให้คุณเลือก ui-router


1
FWIW ฉันใช้เวลาเพียงไม่กี่ชั่วโมงในการต่อสู้กับ ui-router สำหรับ angularjs เอกสารอยู่ในสภาพที่น่าเสียใจมากมันถูกทิ้งไว้อย่างชัดเจนเป็นเวลาหลายปีแล้ว ลิงก์ที่เชื่อมโยงไปยังคำแนะนำที่สำคัญแพ็คเกจแพคเกจ nuget ที่ไม่ถูกต้องในการสอนคุณตั้งชื่อมัน ในที่สุดฉันก็ยอมแพ้หลังจากที่ฉันไม่สามารถหาปัญหาstackoverflow.com/questions/23585065/นี้ได้ ลองใช้ ngRoute ตอนนี้ ...
UnionP

71

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

URL: https://docs.angularjs.org/api/ngRoute

Ui-router เป็นโมดูลที่สนับสนุนซึ่งเอาชนะปัญหาของ ngRoute มุมมองซ้อน / เป็นส่วนใหญ่ซับซ้อน

URL: https://github.com/angular-ui/ui-router

ความแตกต่างบางอย่างระหว่าง ui-router และ ngRoute

http://www.amasik.com/angularjs-ngroute-vs-ui-router/

ป้อนคำอธิบายรูปภาพที่นี่


52

ngRoute เป็นส่วนหนึ่งของกรอบ AngularJS หลัก

ui-router เป็นไลบรารีชุมชนที่สร้างขึ้นเพื่อพยายามปรับปรุงตามความสามารถในการกำหนดเส้นทางเริ่มต้น

นี่เป็นบทความที่ดีเกี่ยวกับการกำหนดค่า / การตั้งค่า ui-router:

http://www.ng-newsletter.com/posts/angular-ui-router.html


35

หากคุณต้องการใช้ประโยชน์จากฟังก์ชั่นการซ้อนมุมมองที่นำมาใช้ภายในกระบวนทัศน์ ngRoute ลองใช้เชิงมุม - เซกเมนต์ - มันมีจุดมุ่งหมายที่จะขยาย ngRoute แทนการแทนที่


16
ฉันไม่เห็นความเกี่ยวข้องของคำตอบของคุณ ผู้เขียนถามถึงความแตกต่างระหว่าง angular-route และ angular-ui-router โดยเฉพาะ นอกจากนี้ข้อจำกัดความรับผิดชอบที่คุณเป็นผู้สร้างจะมีประโยชน์เมื่อโปรโมตห้องสมุดของคุณเอง
เริ่ม

23
ความเกี่ยวข้องนั้นง่าย: angular-route + angular-route-Seg = angular-ui-router ดังนั้นความแตกต่างคือ: angular-ui-router - angular-route = angular-route-
Seg

1
ฉันคิดว่ามันเป็นคำตอบที่ถูกต้อง angular-route-segment.comเป็นตัวเลือกที่ดีสำหรับผู้ที่ไม่ต้องการค่าใช้จ่ายในการใช้ ui-router @vially ผู้คนทำงานอย่างหนักเพื่อสร้างห้องสมุดเหล่านี้มันไม่ใช่เรื่องเลวร้ายที่จะโปรโมตมัน
phil

19

โดยทั่วไป ui-router ทำงานบนกลไกสถานะ ... มันสามารถเข้าใจได้ด้วยตัวอย่างง่าย ๆ :

สมมติว่าเรามีคลังเพลงขนาดใหญ่ (เช่น ..gaana หรือ saavan หรืออื่น ๆ ) และที่ด้านล่างของหน้าคุณมีเครื่องเล่นเพลงที่ใช้ร่วมกันในทุกสถานะของหน้า

ตอนนี้สมมติว่าคุณคลิกที่เพลงเพื่อเล่น ในกรณีนี้เฉพาะสถานะเครื่องเล่นเพลงที่ควรเปลี่ยนแทนการโหลดหน้าเต็ม ที่สามารถจัดการได้อย่างง่ายดายโดย ui-router

ในขณะที่อยู่ใน ngRoute เราเพิ่งแนบมุมมองและคอนโทรลเลอร์


2
สิ่งนี้สามารถทำได้และต้องทำโดยใช้บริการและโรงงาน การใช้แพคเกจนี้คือการขาดความเข้าใจเส้นทางเชิงมุมรัฐและรูปแบบ สถานะถูกจัดการโดย url ซึ่งถูกต้องหากคุณต้องการแชร์แอพในสถานะ specefic ยิ่งไปกว่านั้นคุณสามารถมีคอนโทรลเลอร์หลายตัวในมุมมองเดียวกันที่ตอบสนองต่อการอัพเดตข้อมูลบริการหรือ url param UI ของเราเตอร์ทำสิ่งต่างๆยุ่งและทำลายรูปแบบเชิงมุมอย่างสมบูรณ์
Pablo Ezequiel Leone

ฉันเห็นด้วยอย่างยิ่ง ยังไม่พบคำอธิบายที่จำเป็นต้องใช้เครื่องสถานะนี้
kushalvm

18

1.x เชิงมุม

ng-route :

ng-route พัฒนาโดยทีมงาน angularJS สำหรับการกำหนดเส้นทาง

ng-route: การกำหนดเส้นทางตาม url (ตำแหน่ง)

Ex:

$routeProvider
    .when("/home", {
        templateUrl : "home.html"
    })

เส้นทาง ui :

ui-router ถูกพัฒนาโดยโมดูลของบุคคลที่สาม

ui-router: การกำหนดเส้นทางตามสถานะ

Ex:

 $stateProvider
        .state('home', {
            url: '/home',
            templateUrl: 'home.html'
        })

-> ui-router อนุญาตให้ใช้มุมมองแบบซ้อน

-> ui-router มีประสิทธิภาพมากกว่า ng-route

ng-router , ui-router


13

ngRoute เป็นโมดูลที่สร้างขึ้นโดยทีม Angular ที่มีฟังก์ชันการกำหนดเส้นทางฝั่งไคลเอ็นต์ขั้นพื้นฐาน โมดูลนี้มีฐานที่มีประสิทธิภาพพอสมควรสำหรับการกำหนดเส้นทางและสามารถสร้างขึ้นได้อย่างง่ายดายเพื่อให้ฟังก์ชั่นการจัดเส้นทางที่มั่นคงดังตัวอย่างในบล็อกโพสต์นี้ (อย่าลืมอ่านความคิดเห็นระหว่าง Ward Bell และ Ben Nadel ผู้เขียน คู่ของข้อดีเชิงมุม)

ui-router เปลี่ยนโฟกัสจากเส้นทาง url-centric ไปยังแอปพลิเคชั่น "สถานะ" ซึ่งอาจจะสะท้อนหรือไม่สะท้อนใน url

คุณสมบัติหลักที่เพิ่มโดย ui-router คือสถานะซ้อนและมุมมองที่ตั้งชื่อ

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

มุมมองที่กำหนดชื่อเป็นอีกคุณสมบัติเพิ่มเติมของ ui-router ด้วย ngRoute คุณสามารถมีคำสั่ง ngView เพียงอันเดียวบนหน้าเว็บได้ แต่ด้วยมุมมองที่ตั้งชื่อไว้ใน ui-router คุณสามารถระบุคำสั่ง ui-view ได้หลายคำสั่งจากนั้นแต่ละสถานะจะมีผลต่อเทมเพลตและตัวควบคุมของมุมมองชื่อ ตัวอย่างที่ง่ายที่สุดคือการมีเนื้อหาหลักของแอปของคุณเป็นมุมมองหลักและจากนั้นจะมีแถบส่วนท้ายที่จะเป็นมุมมอง UI ที่แยกต่างหาก ในสถานการณ์สมมตินี้ส่วนท้ายของตัวควบคุมไม่จำเป็นต้องฟังการเปลี่ยนแปลงสถานะ / เส้นทางอีกต่อไป

การเปรียบเทียบที่ดีของ ngRoute และ ui-router สามารถพบได้ในตอนพอดคาสต์นี้

เพียงเพื่อทำให้สิ่งต่าง ๆ เกิดความสับสนมากขึ้นจับตาโมดูลการจัดเส้นทาง "เป็นทางการ" ใหม่ที่ทีม Angular คาดว่าจะเปิดตัวสำหรับรุ่น 1.5 และ 2.0 ของ Angular นี่จะเป็นการแทนที่โมดูล ngRoute นี่ คือเอกสารปัจจุบันสำหรับโมดูลเราเตอร์ใหม่ - มันค่อนข้างเบาบางเนื่องจากโพสต์นี้เนื่องจากการใช้งานยังไม่สิ้นสุด ดูที่นี่สำหรับข่าวเพิ่มเติมเกี่ยวกับเวลาที่โมดูลนี้จะเปิดตัวจริง


11

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

ด้วย ui-router คุณสามารถระบุหลายมุมมองทั้งแบบขนานและซ้อนกัน ดังนั้นหากแอปพลิเคชันของคุณต้องการ (หรืออาจจำเป็นต้องใช้ในอนาคต) การกำหนดเส้นทาง / มุมมองที่ซับซ้อนใด ๆ ให้ไปกับ ui-router

นี้ที่ดีที่สุดคือการเริ่มต้นคำแนะนำสำหรับ AngularUI Router


10

สิ่งพื้นฐานที่คุณต้องรู้: การใช้ ng-router $location.path()และการใช้ui-router$state.go

คุณลักษณะที่เหลือทั้งหมดของเรา


8

เราเตอร์ UI ทำให้ชีวิตของคุณง่ายขึ้น! คุณสามารถเพิ่มแอปพลิเคชัน AngularJS ให้กับคุณผ่านการฉีดเข้าไปในแอปพลิเคชันของคุณ ...

ng-route มาเป็นส่วนหนึ่งของ Core AngularJS ดังนั้นจึงง่ายขึ้นและให้ทางเลือกน้อยลง ...

ดูที่นี่เพื่อทำความเข้าใจกับ ng-route ได้ดียิ่งขึ้น: https://docs.angularjs.org/api/ngRoute

นอกจากนี้เมื่อใช้งานอย่าลืมใช้: ngView ..

ng-ui-router นั้นแตกต่างกัน แต่:

https://github.com/angular-ui/ui-routerแต่ให้ตัวเลือกเพิ่มเติมแก่คุณ ...


6

AngularUI Router เป็นโครงร่างการเราต์สำหรับ AngularJS ซึ่งช่วยให้คุณสามารถจัดระเบียบส่วนต่าง ๆ ของอินเทอร์เฟซของคุณให้เป็นเครื่องสถานะ ซึ่งแตกต่างจากบริการ $ route ในโมดูล Angular ngRoute ซึ่งถูกจัดระเบียบตามเส้นทาง URL, UI-Router ถูกจัดระเบียบรอบ ๆ รัฐซึ่งอาจมีเส้นทางเลือกเช่นเดียวกับพฤติกรรมอื่น ๆ ที่แนบมา

https://github.com/angular-ui/ui-router


4

ngRoute เป็นโมดูลที่พัฒนาโดยทีมงาน Angular.js ซึ่งก่อนหน้านี้เป็นส่วนหนึ่งของแกนเชิงมุม

ui-router เป็นเฟรมเวิร์กที่สร้างขึ้นนอกโครงการ Angular.js เพื่อปรับปรุงและเพิ่มประสิทธิภาพการกำหนดเส้นทาง


3

1- ngRoute ได้รับการพัฒนาโดยทีมงานเชิงมุมในขณะที่ ui-router เป็นโมดูลของบุคคลที่สาม 2- ngRoute ใช้การจัดเส้นทางตาม URL เส้นทางในขณะที่ ui-router ใช้การจัดเส้นทางตามสถานะของแอปพลิเคชัน 3- ui-router ให้ทุกอย่างที่ ng-route นำเสนอพร้อมคุณสมบัติเพิ่มเติมบางอย่างเช่นสถานะซ้อนและมุมมองที่ตั้งชื่อหลายรายการ


0

ng-View(พัฒนาโดยทีม AngularJS) สามารถใช้งานได้เพียงหนึ่งครั้งต่อหน้าในขณะที่ui-View(โมดูลของบุคคลที่สาม) สามารถใช้งานได้หลายครั้งต่อหน้า

ui-View จึงเป็นตัวเลือกที่ดีที่สุด

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