我正在运行 Angular 1.6 和 TurboLinks 5。在大多数情况下,一切运行良好。我禁用了 TurboLinks 缓存,并根据这篇文章中的一些建议手动引导 Angular: Using angularjs with turbolinks
尽管我在服务中运行了 $interval,但我遇到了一个问题。当通过 TurboLinks 更改页面时,Angular 会再次引导,服务会创建一个新的时间间隔,但旧的时间间隔会继续运行!每次发生页面更改事件时,都会创建一个新的间隔,并且它们会相互叠加。
当单击 TurboLinks 链接(使用下面的代码)时,我尝试破坏 Angular 应用程序,但这似乎导致整个 Angular 应用程序退出工作。在页面重新加载后,我似乎也无法获得对旧间隔的引用。
var app = angular.module('app', []);
// Bootstrap Angular on TurboLinks Page Loads
document.addEventListener('turbolinks:load', function() {
console.log('Bootstrap Angular');
angular.bootstrap(document.body, ['app']);
});
// Destroy the app before leaving -- Breaks angular on subsequent pages
document.addEventListener('turbolinks:click', function() {
console.log('Destroy Angular');
var $rootScope = app.run(['$rootScope', function($rootScope) {
$rootScope.$destroy();
}]);
});
如果没有$rootScope.$destroy()
onturbolinks:click
事件,其他一切似乎都按预期工作。
我知道我可以在这里触发一个事件并终止服务中的时间间隔,但理想情况下,我希望有某种方式可以自动处理它并确保在 TurboLinks 请求之间不会意外携带任何东西。有任何想法吗?