2014-10-21 37 views
26

Tôi muốn truy cập $window từ một nhà cung cấp (mymodule.provider(...)) NHƯNG Tôi cần sự phụ thuộc như vậy vào thời gian cấu hình (vì vậy tôi không sử dụng phụ thuộc vào số $get).

Hiện nay tôi không truy cập $window, và lý do tôi cần phụ thuộc như vậy trong thời gian cấu hình là vì tôi cần phải truy cập $window.STATIC_URL, đó là một hằng số trong cửa sổ, và tôi sử dụng nó để cấu hình mẫu của các tiểu bang ($stateProvider).

đang hiện hành là:

mymodule.provider('StaticUrl', function() { 
    this.url = function() { return window.STATIC_URL || 'static'; }; 
    this.$get = this.url; 
}); 

Đây là bởi vì tôi cần giá trị như vậy trong cả hai cấu hình và thời gian chạy (tôi sử dụng nó cho nhiều hơn chỉ là thiết lập các tiểu bang, vì vậy khi tôi cần url như vậy trong một bộ điều khiển , Tôi nhập nó như là một phụ thuộc).

//config 
mymodule.config(['StaticUrlProvider', '$stateProvider', function(sup, $sp){ 
    //... 
    $sp.state('main', { 
     templateUrl: sup.url() + 'path/to/template.html' 
    }); 
    //... 
}]); 
//run-time (in this case: a controller) 
mymodule.controller('MyController', ['$scope', 'StaticUrl', function($s, su) { 
    var buildingType = /*a complex expression here*/; 
    $s.buildingPicture = $su + 'path/to/building/pics/' + buildingType + '.png'; 
}]); 

Với số liệu hiện tại, tôi có ảnh cho mỗi mục nhập, nằm dưới STATIC_URL, phải được cung cấp. Vì vậy, điều này có nghĩa là tôi sử dụng hằng số như vậy trong cả hai giai đoạn.

Làm cách nào để thực hiện theo cách góc cạnh hơn (tức là không dựa vào hình cầu)? Có cách nào để tôi có thể truy cập $window từ nhà cung cấp mà không cần nâng cao moduleerr không?

+2

thử tiêm $ windowProvider – harishr

Trả lời

50

Tiêm $windowProvider và gọi $windowProvider.$get()

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