Bạn có thể truy cập $stateParams bình thường trong một Controller, nhưng làm thế nào để truy cập $stateParams trong Service ?
Nếu bạn đã thử giống với cách khi làm việc với Controller thì các param lấy từ $stateParams sẽ trả về 1 giá trị undefined. Đây là điều ta hoàn toàn ko muốn 😀

Do không thể “tiêm” $stateParams vào trong một Service trực tiếp được mà bạn cần phải làm việc này gián tiếp thông qua phương thức resolve khi thiết lập UI Router, như sau:

      // Live routes
      $stateProvider
        .state('meetingui', {
          url: '/:roomName',
          templateUrl: '/templates/meetingui/live.html',
          controller: 'LiveController',
          resolve: {
            dummy1: ['$stateParams', 'RoomState', function ($stateParams, RoomState) {
              RoomState.roomName = $stateParams.roomName;
              RoomState.serverApp = $stateParams.roomName;
            }]
          }
        });

Vậy là giờ đây, trong các controller hoặc service khác đều có thể đọc được thông tin cấu hình roomName trong Service RoomState.

About The Author

  • Nguyễn Trung Hiếu

    Em đang xem cái bài giảng của a trên hóa học trực tuyến. nhưng bây giờ em đang có project về angular có đoạn code trong router nhờ anh giải thích dùm em.

    .state(‘web.twitter’, {
    url: ‘/twittos?alertId&from&dev’,
    templateUrl: ‘html/twitter.html’,
    controller: ‘twitterCtrl’,
    controllerAs: ‘vm’,
    resolve:{
    twitterResolved:function(apiChartService,$log,$stateParams,twitterService) {
    “ngInject”;

    twitterService.purgeStorage();
    var alertId=$stateParams.alertId;
    $log.debug(“alertId:”,alertId);
    return apiChartService.twitterResolved(alertId);
    }
    }
    })
    chổ em chưa hiểu là trong phần resole
    twitterResolved ý nghĩa nó là gì ?
    apiChartService: là 1 service
    $log:
    $stateParams: em chưa hiểu nó dùng để làm gì và tương tác với service nào
    twitterService: là 1 service

    twitterService.purgeStorage(); -> dùng clear service cache
    var alertId=$stateParams.alertId; -> chổ này em chưa hiểu nó lấy alertId từ đâu

    nhờ anh giải thích hộ em nhé. em xem tiếp các bài còn lại trong khóa học online của a

    • Chào em, resolve là 1 tùy chọn cho phép được thực thi trước khi Controller được khởi tạo và hoạt động. Mục đích của nó là e có thể khởi tạo các cấu hình, lấy dữ liệu từ server, …

      1. twitterResolved là một promisable, tức là nó sẽ phải thực hiện các nghiệp vụ ở trong function này thì controller twitterCtrl mới được phép thực thi
      2. $stateParams đây là service của ui.router nó cho phép em lấy các tham số định nghĩa ở trên URL. Như ví dụ của em đưa thì có thể lấy được các tham số: $stateParams.alertId, $stateParams.from, $stateParams.dev
      3. $stateParams.alertId em xem lại ý số (2)

      Viết code ở đây hơi khó đọc, nếu em có khó khăn, thắc mắc nào hãy post trên Github Issue nhé. A vẫn support ở đây và ở Github, viết mã ở trên đó dễ đọc hơn 🙂

      Link: https://github.com/vunb/angular-hoidap/issues