2013-10-28 16 views
5

Tôi không muốn tải các mẫu tuyến đường của mình một cách lười biếng. Thay vào đó, tôi muốn tải tất cả các mẫu tuyến đường của mình vào $ templateCache trước bất kỳ tuyến đường nào đang thi hành.

Đây là những gì tôi đang làm:

angular.module('myApp', ['ngRoute']).config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) 
{ 
    $locationProvider.html5Mode(false); 

    $routeProvider.when("/main", {templateUrl: "main", controller: "MainCtrl"}) 
        .when("/login",{templateUrl: "login", controller: "LoginCtrl"}); 
}]) 
.run(['$location','$templateCache', function ($location, $templateCache) 
{ 
    //...Save templates in $templateCache 
    $location.path("/login"); 
}]); 

này hoạt động OK nếu bạn duyệt đến / bởi vì nó không phù hợp với bất kỳ tuyến đường. Nhưng nếu bạn duyệt hoặc làm mới trên /#/login có vẻ như dịch vụ tuyến đường cố gắng tải mẫu trước khi khối chạy của tôi chạy và yêu cầu máy chủ cho nó.

Có cách nào để đảm bảo mã điền $ templateCache sẽ thực thi trước khi dịch vụ tuyến đường tìm mẫu?

Trả lời

3

Nếu bạn sử dụng grunt bạn rất khuyên bạn nên grunt-angular-templates cho mục đích đó, nhưng nếu bạn không muốn làm điều này bằng tay tạo mô-đun riêng biệt, trong đó bạn có logic tương tự với những gì bạn có ngay bây giờ, một cái gì đó dọc theo dòng:

angular.module('myapp.templates').run(['$templateCache', function($templateCache) { 
$templateCache.put(... 

và sau đó chỉ cần tham chiếu mô-đun đó làm phụ thuộc ứng dụng của bạn. Chạy khối mô-đun phụ thuộc sẽ chạy đầu tiên trước khi định tuyến logic đá vào và đó là những gì bạn muốn.

+0

Đó là một ý tưởng hay. Tôi nghĩ rằng nó sẽ làm việc, nhưng nó không. Khối * config * của mô-đun chính 'myApp' chạy trước khối * chạy * của mô-đun 'mẫu' mặc dù myApp có sự phụ thuộc vào các mẫu. Tôi đang nghĩ rằng các khối cấu hình không phải chờ phụ thuộc để thực thi như các khối chạy có thể làm. Và tiếc là các tuyến đường cần phải được thiết lập trong một khối cấu hình. – CHS

+0

Vâng, các tuyến cần phải được thiết lập trong khối cấu hình, nhưng việc định tuyến chính nó không chạy trong khối cấu hình, vì vậy mã tôi đính kèm sẽ thực hiện thủ thuật, $ templateCache sẽ được điền trước chuyển hướng. Tôi làm điều này trong các ứng dụng của tôi (sử dụng grunt-angular-templates) và nó hoạt động hoàn hảo. –

+0

@Tadeusz Không, kiểm tra lưu lượng mạng của bạn. Định tuyến sẽ cố tải xuống mẫu cho tuyến phù hợp với URL hiện tại ngay cả trước khi các khối chạy thực thi. (1.2-rc3) Bạn có thể không nhận thấy điều này nếu máy chủ của bạn có thể phản hồi chính xác yêu cầu này. Thay đổi tuyến đường trong tương lai sẽ sử dụng bộ nhớ cache, nhưng thay đổi ban đầu sẽ không. – user169867

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