สิ่งที่ควรรู้
$urlRouterProvider คือ อะไร ?
เป็นตัวจัดการกับ URL ทุกครั้งที่มีการเรียก URL ที่กำหนดไว้ โดยมีฟังก์ชั่นที่ให้ใช้งาน 3 ฟังก์ชั่น
- when()
- otherwise()
- rule()
when()
when() เป็นฟังก์ชั่นสำหรับเมื่อเราต้องการ redirect โดยมีรายละเอียดดังนี้
- what - เป็น pathOfUrl ที่ส่งมา
- handler - เป็น pathOfUrl ที่ต้องการ redirect ไป / ฟังก์ชั่น
.config(function($urlRouterProvider) { $urlRouterProvider.when(what, handler); });
กรณีที่ handler เป็นฟังก์ชั่นจะสามารถ return ค่าได้ 3 ลักษณะ
- False - เพื่อระบุให้ $urlRouter ไม่ตรงกับ ที่กำหนดไว้ โดย $urlRouter จะไปหา state ที่ถูกต้อง ใช้เพื่อระบุว่าผู้ใช้เข้าใช้ได้ถูก URL
- String (URL) - จะทำการ redirect ไปที่ URL ดังกล่าว
- True/Undefinded - เพื่อระบุให้ $urlRouter รู้ว่ากำลังใช้งาน URL ดังกล่าว
otherwise()
otherwise() เป็นฟังก์ชั่นที่ใช้ในกรณีที่ URL ไม่ถูกต้อง otherwise จะทำการ redirect ไปยัง url ที่เราต้องการ
.config(function($urlRouterProvider){ // otherwise use for invalid route $urlRouterProvider.otherwise('/index'); // Advance otherwise $urlRouterProvider.otherwise(function($injector, $location){ ... some advanced code... });
rule()
rule() เป็นฟังก์ชั่นที่ใช้ในการกำหนด custom routing ก่อนที่จะไปเช็คกับ routing อื่นๆ ที่กำหนดไว้
.config(function($urlRouterProvider){ $urlRouterProvider.rule(function($injector, $location) { return '/index'; });
ตัวอย่างการใช้งาน otherwise
ทำการสร้าง state ไว้ 3 state
.config(function ($stateProvider, $urlRouterProvider) { $stateProvider .state('one', { url: '/one', template: '<p>this is state one</p><p ui-view></p>' }) .state('one.two', { url: '/two', template: '<p>this is state one-two</p>' }) .state('three', { url: '/three', template: '<p>this is state three</p>' }); });
กำหนด otherwise ให้เมื่อกรอก url ไม่ถูกต้องให้ส่งกลับมาที่ state one
.config(function ($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/one'); $stateProvider .state('one', { url: '/one', template: '<p>this is state one</p><p ui-view></p>' }) .state('one.two', { url: '/two', template: '<p>this is state one-two</p>' }) .state('three', { url: '/three', template: '<p>this is state three</p>' }); });
สามารถดูตัวอย่างผลลัพธ์ได้ที่นี่ Demo
สังเกตได้ว่า กรณีที่ URL ไม่ตรงกับ state ไหนเลย จะทำการ redirect ไปยัง state one