2013-09-22 20 views
5

Tôi đã điều sau đây:Tại sao tôi không thể sử dụng localStorage trong .config của tôi khi nó bao gồm trong định nghĩa .module?

var app = angular 
    .module('app', ['ui.router', 'admin', 'home', 'questions', 'ngResource', 'LocalStorageModule']) 
    .config(['$sceProvider', '$stateProvider', '$locationProvider', 'localStorageService', 
     function ($sceProvider, $stateProvider, $locationProvider, localStorageService) { 

     $sceProvider.enabled(false); 
     $locationProvider.html5Mode(true); 

     localStorageService.add('adminContent', 'xx'); 

này đem lại cho tôi một lỗi:

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to: 
Error: [$injector:unpr] Unknown provider: localStorageService 
http://errors.angularjs.org/1.2.0-rc.2/$injector/unpr?p0=localStorageService 
    at hasOwnPropertyFn (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:78:12) 
    at http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:2997:19 
    at getService (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3119:39) 
    at Object.invoke (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3140:13) 
    at http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3078:37 
    at Array.forEach (native) 
    at forEach (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:224:11) 
    at loadModules (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3065:5) 
    at createInjector (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:3007:11) 
    at doBootstrap (http://127.0.0.1:81/Scripts/angular-v1.2.0-rc.2.js:1152:20) 
http://errors.angularjs.org/1.2.0-rc.2/$injector/modulerr?p0=app&p1=Error%3…http%3A%2F%2F127.0.0.1%3A81%2FScripts%2Fangular-v1.2.0-rc.2.js%3A1152%3A20) 

Há chẳng phải có thể sử dụng như localStorage trong cấu hình như thế này? Tôi đã bao gồm mã cho mô-đun localstorage và nó được tải trước app.js. Nó hoạt động trong các phần khác của ứng dụng, nhưng cùng một dòng không hoạt động khi được đặt trong app.config

Trả lời

8

Chỉ các nhà cung cấp và hằng số được tiêm trong khối cấu hình. Xem tài liệu AngularJs để biết thêm thông tin chi tiết: http://docs.angularjs.org/guide/module (sektion "Mô-đun Đang tải & Phụ thuộc").

Configuration blocks - get executed during the provider registrations and configuration phase. Only providers and constants can be injected into configuration blocks. This is to prevent accidental instantiation of services before they have been fully configured.

+0

Bạn có thể làm việc này với '$ injector', đúng không? – Casey

1

Trong khi câu trả lời được chấp nhận trả lời chính xác câu hỏi, nó không cung cấp bất kỳ giải pháp nào (cho người mới sử dụng góc tìm đúng cách để thực hiện việc này).

Bạn có quyền truy cập vào các dịch vụ tại thời gian chạy, điều này xảy ra sau khi định cấu hình. Ví dụ:

angular.module('app').run(storeAdminContent); 

storeAdminContent.$inject = ['localStorageService']; 
function storeAdminContent(localStorageService) { 
    localStorageService.add('adminContent', 'xx'); 
} 
+0

Tôi muốn kiểm tra xem tôi có một phiên hay không và chạy phương pháp sẽ thực thi sau khi cấu hình để ho làm tôi kiểm tra nó trước khi định tuyến được định nghĩa trong cấu hình? – Yatin

+0

Nó sẽ có thể làm như vậy, nhưng nó sẽ được đi ngược lại thiết kế góc cạnh. Các tuyến quản trị viên phải luôn tồn tại, nhưng bạn nên đảm bảo rằng người dùng được xác thực khi họ nhập các tuyến đó. Một lựa chọn khác (có lẽ tốt hơn) sẽ là có một ứng dụng góc hoàn toàn riêng biệt cho phía quản trị viên và chia sẻ mã giữa chúng bằng cách sử dụng các mô-đun nút hoặc bower. –