2013-09-02 38 views
12

Có cách nào để truy cập $stateParams cho trạng thái bạn đang chuyển sang từ một dịch vụ được gọi trong chức năng giải quyết không? Với ngRoute bạn sẽ sử dụng $route.current.params. Vì đây tối thiểu chương trình nặng nề, dịch vụ chỉ nhìn thấy trạng thái bạn đang để lại:

http://plnkr.co/edit/QpwgAj?p=preview

tôi nhận được mới $stateParams khi $stateParams được tiêm trực tiếp vào một chức năng quyết tâm, nhưng giá trị vẫn còn đang ở phía sau bởi một tuyến đường trong dịch vụ.

Tôi đang thiếu gì?

+0

Bạn sẽ không bỏ lỡ bất cứ điều gì. Cho đến khi quá trình chuyển đổi hoàn tất, dịch vụ $ stateParams không có thông số mới. – laurelnaiad

+0

Có cách nào để truy cập thông số từ trạng thái mới trước khi quá trình chuyển đổi hoàn tất với dịch vụ '$ state' (hoặc một số khác) không? – nrw

+0

Như tôi thấy trong tài liệu trạng thái indepth có một mã mẫu, cho thấy '$ stateParams' được tiêm vào hash giải quyết. Xem phần wiki 'Giải quyết 'https://github.com/angular-ui/ui-router/wiki – Chandermani

Trả lời

11

Bạn không thể tiêm các thông số đến vào dịch vụ riêng của mình, nhưng bạn có thể vượt qua chúng để một hàm trong dịch vụ (hoặc bạn cũng có thể gán chúng vào một tài sản để phục vụ).

this plunker cho biết cách chuyển chúng sang hàm, từ đó lưu trữ chúng vào thuộc tính trong dịch vụ. Sử dụng một thuộc tính "giả" không nên làm tổn thương, nhưng nó có một chút xấu xí. :)

Nó có thể có ý nghĩa hơn để truyền các tham số cho bộ điều khiển dưới dạng thuộc tính phân giải và sau đó đưa chúng ra một dịch vụ từ bộ điều khiển bộ điều khiển ... đó là những gì tôi muốn làm.

+0

Xin chào, người chia bài của bạn đã bị hỏng nên tôi đã sửa nó, cập nhật ngã ba tại đây: http://plnkr.co/edit/JZjkG1UdTi1V60DykFxg?p=preview –

8

Trong chức năng quyết tâm của bạn trong stateprovider

resolve: { 
    something: function(MyService, $stateParams){ 
     return MyService.doSomethingWithParam($stateParams.someParameter); 
    } 
} 

Trong dịch vụ của bạn

myService = angular.module('myService', []) 
    .factory('MyService', function() { 

     var myServiceInstance; 

     myServiceInstance.doSomethingWithParam= function(param){ 
      //...store or do something with your state param here and return result 
     }; 

     return myServiceInstance; 
}); 
+0

Làm thế nào mà nó hoạt động khi được rút gọn? – pilau

+2

@pilau, nếu bạn sử dụng 'ng-chú thích' sẽ không có vấn đề gì với việc rút gọn. –