วิธีดูการเปลี่ยนเส้นทางใน AngularJS


คำตอบ:


330

หมายเหตุ : นี่เป็นคำตอบที่ถูกต้องสำหรับ AngularJS เวอร์ชันดั้งเดิม ดูคำถามนี้สำหรับรุ่นที่ปรับปรุงแล้ว

$scope.$on('$routeChangeStart', function($event, next, current) { 
   // ... you could trigger something here ...
 });

นอกจากนี้ยังมีเหตุการณ์ต่อไปนี้ (ฟังก์ชันการเรียกกลับใช้อาร์กิวเมนต์ที่ต่างกัน):

  • $ routeChangeSuccess
  • $ routeChangeError
  • $ routeUpdate - ถ้ามีการตั้งค่าคุณสมบัติreloadOnSearchเป็นเท็จ

ดูเอกสาร$ เส้นทาง

มีสองเหตุการณ์ที่ไม่มีเอกสารอื่น ๆ:

  • $ locationChangeStart
  • $ locationChangeSuccess

ดูความแตกต่างระหว่าง $ locationChangeSuccess และ $ locationChangeStart คืออะไร


38
คุณต้องฉีด "$ route" บางแห่งหรือเหตุการณ์เหล่านี้ไม่เคยเกิดขึ้น
Kevin Beal

19
$locationChangeStartและ$locationChangeSuccessเอกสารตอนนี้! docs.angularjs.org/api/ng.$location
JP ten Berge

2
@KevinBeal ขอบคุณขอบคุณขอบคุณ ฉันกำลังไปหากล้วยพยายามหาสาเหตุว่าทำไมเหตุการณ์เหล่านี้จึงไม่ยิง
Dan F

4
เพียงบันทึกสำหรับทุกคนที่ใช้ $ state แทนที่จะเป็น $ route ในกรณีดังกล่าวคุณต้องฉีด $ state และใช้ $ stateChangeStart
tomazahlin

7
ได้$rootScope.$on("$routeChangeStart", function (event, next, current) {แล้วตอนนี้
abbaf33f

28

หากคุณไม่ต้องการวางนาฬิกาไว้ในตัวควบคุมที่เฉพาะเจาะจงคุณสามารถเพิ่มนาฬิกาสำหรับการใช้งานทั้งหมดในแอพเชิงมุม run()

var myApp = angular.module('myApp', []);

myApp.run(function($rootScope) {
    $rootScope.$on("$locationChangeStart", function(event, next, current) { 
        // handle route changes     
    });
});

1
ฉันรักมันเมื่อฉันเจอคำตอบเช่นนี้และค้นหาสิ่งที่ฉันไม่รู้จักเช่น. run () แม้ว่านี่ไม่ใช่ที่ที่ฉันต้องการฟังเหตุการณ์ในกรณีที่ใช้โดยเฉพาะของฉันมันมีประโยชน์มากสำหรับฉัน ขอบคุณ Zanon!
พอล J

ฉันกำลังเรียนรู้เชิงมุม ดังนั้นฉันจำเป็นต้องรู้ว่าข้อมูลประเภทใดที่เราจะได้รับจากเหตุการณ์ถัดไปอาร์กิวเมนต์ปัจจุบัน
Monojit Sarkar



-1

นี่สำหรับผู้เริ่มต้นทั้งหมด ... อย่างฉัน:

HTML:

  <ul>
    <li>
      <a href="#"> Home </a>
    </li>
    <li>
      <a href="#Info"> Info </a>
    </li>
  </ul>

  <div ng-app="myApp" ng-controller="MainCtrl">
    <div ng-view>

    </div>
  </div>

เชิงมุม:

//Create App
var app = angular.module("myApp", ["ngRoute"]);

//Configure routes
app.config(function ($routeProvider) {
    $routeProvider
      .otherwise({ template: "<p>Coming soon</p>" })
      .when("/", {
        template: "<p>Home information</p>"
      })
      .when("/Info", {
        template: "<p>Basic information</p>"
        //templateUrl: "/content/views/Info.html"
      });
});

//Controller
app.controller('MainCtrl', function ($scope, $rootScope, $location) {
  $scope.location = $location.path();
  $rootScope.$on('$routeChangeStart', function () {
    console.log("routeChangeStart");
   //Place code here:....
   });
});

หวังว่านี่จะช่วยผู้เริ่มต้นทั้งหมดเช่นฉัน นี่คือตัวอย่างการทำงานเต็มรูปแบบ:

<html>
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.min.js"></script>
</head>
<body>
  <ul>
    <li>
      <a href="#"> Home </a>
    </li>
    <li>
      <a href="#Info"> Info </a>
    </li>
  </ul>

  <div ng-app="myApp" ng-controller="MainCtrl">
    <div ng-view>

    </div>
  </div>
  <script>
//Create App
var app = angular.module("myApp", ["ngRoute"]);

//Configure routes
app.config(function ($routeProvider) {
    $routeProvider
      .otherwise({ template: "<p>Coming soon</p>" })
      .when("/", {
        template: "<p>Home information</p>"
      })
      .when("/Info", {
        template: "<p>Basic information</p>"
        //templateUrl: "/content/views/Info.html"
      });
});

//Controller
app.controller('MainCtrl', function ($scope, $rootScope, $location) {
  $scope.location = $location.path();
  $rootScope.$on('$routeChangeStart', function () {
    console.log("routeChangeStart");
   //Place code here:....
   });
});
  </script>
</body>
</html>

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