2013-03-07 18 views
15

Tôi cần đăng ký một phương thức có sẵn ở mọi nơi trong angularjs. Phương thức này có 2 đối số (id tài nguyên, gọi lại khi xóa thành công) và nó sử dụng nhà cung cấp tài nguyên để thực sự xóa mục đó.

Sau đó, để đăng ký, tôi cần angularjs tiêm cho tôi $rootScopeMyResourceProvider. Ý tưởng đầu tiên của tôi là làm điều đó trong bộ điều khiển trang chủ của tôi:

 
    var HomeCtrl = function ($rootScope, MyResourceProvider) { 
     $rootScope.confirmAndDeletePackage = function (sId, fCallback) { 
      // do some stuff 
      MyResourceProvider.delete({id: sId}, fCallback); 
     } 
    } 

Đây thực sự là vấn đề của tôi. Điều đó hoạt động tốt trong điều hướng thông thường (home -> list -> select -> delete) nhưng nếu người dùng truy cập trực tiếp trang có nút xóa có sẵn trên trang chủ, phương thức này sẽ không khả dụng (vì HomeController chưa được khởi tạo) ...

Vì vậy, câu hỏi của tôi là nơi tôi có thể di chuyển đoạn mã này để đảm bảo nó luôn được thực hiện tại trình khởi động ứng dụng.

tôi đã cố gắng trên myApp.config() nhưng w/o thành công ...

Bất kỳ ý tưởng?

+3

Tại sao bạn không thể thực hiện điều này trong dịch vụ và tiêm dịch vụ đó ở mọi nơi bạn có nút xóa và gọi chức năng được yêu cầu trên dịch vụ đó? – ganaraj

+1

Bởi vì bạn đã không nói với tôi trước :)! thx, tôi di chuyển trong một dịch vụ và tôi có thể nhận được nó ở khắp mọi nơi tôi cần và nó hoạt động tốt! – poussma

Trả lời

40

Như @ganaraj đã đề cập trong nhận xét, dịch vụ có lẽ là lựa chọn tốt hơn cho việc này.

Tuy nhiên, để trả lời câu hỏi của bạn, bạn có thể sử dụng phương thức run().

myApp.run(function($rootScope, MyResourceProvider) { 
    $rootScope.confirmAndDeletePackage = function (sId, fCallback) { 
     // do some stuff 
     MyResourceProvider.delete({id: sId}, fCallback); 
    } 
}) 

Chạy() được gọi sau khi tất cả các mô-đun đã được tải.

+9

+1 Đây là câu trả lời đúng cho câu hỏi được hỏi ... ngay cả khi câu trả lời * thực * là "không làm theo cách đó". ;) haha. –