5

Tôi sử dụng số templateUrl và nó hoạt động tuyệt vời!Cập nhật các mẫu được lưu trong bộ nhớ cache

app.directive('myDir', function() { 
    return { 
     templateUrl: 'partials/directives/template.html' 
    }; 
}; 

Tuy nhiên ... khi tôi thực hiện thay đổi đối với các mẫu này, bản cập nhật này không cập nhật. Trong phát triển nó không phải là một vấn đề lớn gây ra tôi konw những gì được cập nhật và chỉ có thể xóa bộ nhớ cache bằng tay.

Nhưng tôi không thể xóa bộ nhớ cache của tất cả người dùng. Có cách nào để làm việc này không? Giống như sử dụng thẻ meta CACHE-CONTROL hoặc một cái gì đó như thế?

+0

AngularJS templateCache sẽ bị xóa khi bạn làm mới trình duyệt. Nếu bạn vẫn nhận được mẫu cũ, đó là do bộ nhớ đệm của trình duyệt lưu trữ partials. Như bạn đã nói, bạn cần phải kiểm tra các tiêu đề bộ nhớ cache và điều chỉnh chúng – Chandermani

+0

Tôi không chắc chắn nên thêm gì. Tôi có thêm "no cache" vào index.html không? Hoặc tôi có thêm nó vào từng phần không? Tôi cũng lưu ý rằng máy chủ đang gửi siêu dữ liệu ETAG vậy tại sao trình duyệt (chrome) không sử dụng nó :(? –

+0

Bạn có tìm thấy giải pháp cho vấn đề này không? Nếu có, xin vui lòng chia sẻ – Troels

Trả lời

1

Theo như tôi thấy, bạn có hai lựa chọn -

  1. sử dụng $cacheFactory dịch vụ để loại bỏ bộ nhớ cache cũ Sau một mẫu được lấy, góc lưu trữ nó trong mặc định $ dịch vụ templateCache

    // Please note that $cacheFactory creates a default key '$http' 
    
    var cache = $cacheFactory.get('$http'); 
    
    // The remove() function removes a key-value pair from the cache, 
    // if it’s found. If it’s not found, then it just returns undefined. 
    
    cache.remove(your url); 
    
  2. sử dụng tập tin phiên bản đổi tên tập tin với mỗi thay đổi - tức là nếu phiên bản đầu tiên của tập tin là mẫu-1.0.1.html, khi bạn thực hiện một số thay đổi mã đổi tên nó để templ ate-1.0.2.html v.v. Bằng cách này, tệp mới sẽ được tải xuống mỗi khi bạn thực hiện một số thay đổi.

+0

Cảm ơn bạn, nhưng không phải là có một cách tốt hơn? Cả hai giải pháp của bạn đang cố gắng sửa chữa các triệu chứng không phải là nguyên nhân. Sửa chữa tôi đang tìm là nơi trình duyệt biết rằng tập tin đã được cập nhật và sau đó lấy nó Ví dụ: sử dụng meta ETAG –

+0

Có một cách khác - lưu trữ các mẫu của bạn trong các tệp js. không được lưu trữ theo góc cạnh. – omickron

+0

Nếu chúng ta đang đề cập đến các loại 'thủ thuật' sau đó tôi nhớ lại một cái cũ mà bạn không cần phải thay đổi tên của tập tin mẫu, nhưng bạn cần phải thay đổi yêu cầu. Vì vậy, nó sẽ giống như 'templateUrl: 'tplFile.html? V = 20150503' – george007

0

Một giải pháp nhanh chóng và dơ bẩn là để vô hiệu hóa bộ nhớ đệm trong $httpProvider

app.config(function ($httpProvider) { 
    $httpProvider.defaults.headers.get = { 
     'Cache-Control': 'no-cache' 
    }; 
}); 

tôi sẽ không đề nghị này. Nhưng nó đã có tác dụng.

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