我在我从事的一个项目中遇到了这个问题。我试过这些方法。
方法一:设置不同状态的缓存属性false。
var core = angular.module('app.core');
core.cofigure(configure);
configure.$inject = ['$stateProvider'];
// Configuration Function
function configure($stateProvider){
$stateProvider
.state('login', {
url: '/login/:redirect/:viewId',
cache: false, // Here i have set the cache property to false
templateUrl: 'app/layout/login.html'
})
.state('home', {
url: "/home",
cache: false, // Here also
abstract: true,
templateUrl: 'app/layout/container.html'
});
}
现在这种方法很好,但它在随机时间和 Internet Explorer 中不起作用。
方法 2:在模板 URL 中添加时间戳。
// I created a timestamp string with the current time.
var date = new Date().getTime().toString();
$stateProvider
.state('login', {
url: '/login/:redirect/:viewId',
cache: false,
// Now i append it here
templateUrl: 'app/layout/login.html' +'?' + date
})
.state('home', {
url: "/home",
cache: false,
abstract: true,
templateUrl: 'app/layout/container.html' + '?' + date // Here also.
});
这种方法是我们在寻找解决此问题的可能方法后决定的。但是,在这种情况下不会发生缓存。模板文件的每个 GET 请求都是不同的,它将保证加载的模板将是更新的模板。但是,如果您正在构建一个具有大量模板且客户端性能至关重要的 Web 应用程序,则此方法将无济于事。
方法3:需要模板
我推荐这种方法。您可以在应用程序中使用require.js在 javascript 执行时加载模板。这将在为开发目的运行应用程序时加载模板,并且在您缩小代码以用于生产时加载模板。由于模板已加载到 javascript 代码中,因此在部署到生产环境时也不必保留 html 模板文件。
$stateProvider
.state('login', {
url: '/login/:redirect/:viewId',
// Note 'template' and not 'templateUrl'
template: require('app/layout/login.html')
})
.state('home', {
url: "/home",
abstract: true,
template: require('app/layout/container.html')
});