2014-09-22 21 views
5

Tôi muốn xuất thông điệp tường trình thành bàn điều khiển khi gỡ lỗi. Hoạt động tốt trong bộ điều khiển nhưng không thể làm cho nó hoạt động trong khối cấu hình mô-đun, ví dụ:

angular.module('MyApp', []) 
    .run(function($state){ 
    // run stuff here 
    }); 
    .config(function($logProvider){ 
    $log.debug('Config debug message'); 
    }); 

tôi nhận được một lỗi:

error TypeError: Cannot read property 'debug' of undefined 

Có thể sử dụng logProvider trong khối cấu hình của một module?

+0

'$ logProvider' không phải là' $ dịch vụ log'. Bạn muốn làm gì với nhà cung cấp nhật ký? Nhà cung cấp là để cấu hình trong giai đoạn cấu hình – PSL

Trả lời

15

$logProvider truy cập trong giai đoạn cấu hình được sử dụng để định cấu hình dịch vụ nhật ký hoặc bạn có thể tiêm $provide để thay đổi/tận dụng hành vi của logservice sử dụng decorators. Bản thân dịch vụ nhật ký chưa được khởi tạo trong mô-đun MyApp của bạn. Thay vào đó, bạn có thể lấy một bản ghi nhật ký từ lõi ng và sử dụng nó để gỡ lỗi.

Bạn có thể làm: -

.config(function(){ 
    var $log = angular.injector(['ng']).get('$log') 
    $log.debug('Config debug message'); 
    }); 

$logProvider.$get sẽ cung cấp cho bạn các nhà xây dựng cho logservice, bản thân bạn có thể tạo ra một thể hiện của nó bằng cách gọi $injector.instantiate($logProvider.$get) nhưng vấn đề là nó có một sự phụ thuộc vào dịch vụ cửa sổ trong đó có không phải là instantiated bee, do đó, cuối cùng instantger logger của bạn sẽ thất bại.

Một cách hacky sẽ buộc góc để instantate logger bằng cách thêm một trang trí trong khối cấu hình mà bạn có thể thiết lập là khối cấu hình đầu tiên trước khi bất kỳ đăng nhập cấu hình là cần thiết, sau đó bạn có thể thực hiện ctor từ $logProvidergetter và lấy ví dụ của trình ghi nhật ký.

.config(function($provide){ 
    //Just a dummy decorator 
    $provide.decorator('$log', function($delegate){ 
     return $delegate; 
    }); 

}).config(function($logProvider){ 
    //get logger instance 
    var log = $logProvider.$get(); 
    log.debug("Got it"); 
}); 

Plnkr

+0

Cảm ơn @PSL - điều này hoạt động tốt cho những gì tôi cần. Chỉ cần có thể thiết lập một số thông báo gỡ lỗi cho các khối cấu hình của tôi. – onblur

+0

@onblur Bạn được chào đón. Tôi đã thêm một cách nữa. Tôi không chắc chắn nếu có cách nào khác tốt hơn để làm điều này .. :( – PSL

+0

Trong đoạn mã đầu tiên, tại sao bán dấu chấm phẩy ra sau .get ('$ log')? – crowne

Các vấn đề liên quan