我正在使用workbox-build-2.1。2和workbox-sw-2.1。2和Angular-cli-1.6。0,一切正常,但当我更新应用程序并为生产和软件构建它时。js文件被修改,然后在chrome浏览器中服务人员没有更新,它继续使用旧版本,直到我手动取消注册。如果不安装新软件。js文件,当它安装新版本时,它会自动清理网站上的旧数据并重新开始吗?还是我需要设置该部分?。
以下是我注册软件的方式。Angulars主文件中的js:
platformBrowserDynamic()
.bootstrapModule(AppModule)
.then(registerServiceWorker)
.catch(err => console.log(err));
function registerServiceWorker() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('sw.js')
.then(reg => {
log('Registration successful', reg);
reg.onupdatefound = () => {
const installingWorker = reg.installing;
installingWorker.onstatechange = () => {
switch (installingWorker.state) {
case 'installed':
if (navigator.serviceWorker.controller) {
log('New or updated content is available', installingWorker);
} else {
log('Content is now available offline', installingWorker);
}
break;
case 'redundant':
console.error('The installing service worker became redundant', installingWorker);
break;
default:
log(installingWorker.state);
break;
}
};
};
})
.catch(e => {
console.error('Error during service worker registration:', e);
});
} else {
console.warn('Service Worker is not supported');
}
}
生成与npm一起运行的软件文件
const workboxBuild = require('workbox-build');
const SRC_DIR = 'src';
const BUILD_DIR = 'public';
const SW = 'sw.js';
const globPatterns = [
"**/*.{ico,html,css,js,woff,json}"
];
const globIgnores = [
"sw.js"
];
const input = {
swSrc: `${SRC_DIR}/${SW}`,
swDest: `${BUILD_DIR}/${SW}`,
globDirectory: BUILD_DIR,
globPatterns: globPatterns,
globIgnores: globIgnores,
maximumFileSizeToCacheInBytes: 4000000
};
workboxBuild.injectManifest(input).then(() => {
console.log(`The service worker ${BUILD_DIR}/${SW} has been injected`);
});
和基地西南部。js文件
importScripts('workbox-sw.prod.v2.1.2.js');
const workboxSW = new self.WorkboxSW({clientsClaim: true});
workboxSW.precache([]);
workboxSW.router.registerNavigationRoute('/index.html');
*****更新*****
使用开发服务器的express.js,我将Cache-Control设置为零,现在当我重新加载页面时,Service Worker会更新到新版本。我在生产中与缓存控制设置为天/年混淆了服务工作者更新需要多长时间,然后它会清除旧的现金和indexDB还是我们必须手动完成
以下是express的代码:
app.use('/', express.static(publicFolderPath, {maxAge: 0}));
app.get('*', (req, res) => {
res.sendFile('index.html');
});
如:
self.addEventListener('activate', function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.filter(function(cacheName) {
// Return true if you want to remove this cache,
// but remember that caches are shared across
// the whole origin
}).map(function(cacheName) {
return caches.delete(cacheName);
})
);
})
);
});
请参阅此链接:https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker
希望这能有所帮助
问题内容: 我试图弄清楚Angular的工作原理,并在模型更改时无法更新视图。 的HTML JS http://jsfiddle.net/N2G7z/ 有任何想法吗? 问题答案: 正如上面提到的Ajay beniwal一样,您需要使用Apply来开始消化。
所以我的应用程序有一个主窗口显示食谱列表,第二个窗口(从主窗口打开)添加新的食谱到列表(有信息)。两个窗口具有相同的视图模型。经过测试,新的制作方法被成功添加到列表中,但是UI没有更新新的制作方法。我也有一个删除按钮在主窗口为每个食谱和它的工作正常。删除的制作方法将在视图模型和UI中删除。我的代码相当长。我希望它是可读的。下面是我的代码(还有很多其他的UI,所以我只显示相关的代码): 主窗口视图
问题内容: 我是Postgresql的新手,正在使用9.3版。我有一张桌子,里面有几行。我的问题是,当我更新一行时,该行号被更改并将其移动到表中的最后一个位置。我的问题是:这是否是默认行为,因为我认为在更新行时,不应将其从其位置移开?该操作似乎就像先删除然后再插入该行。 这是示例SQL: 从今起: 将ID为1的更新后的行移动到最后一个位置。 谢谢 问题答案: 行号已更改 关系表中没有“行号”之类的
我有两个实体具有@OneTomany(Entity1)&@ManyToOne(Entity2)双向关系。在@OneTomany关系中,我有@Cascading{Cascade.All}。但是当我在事务或方法中将具有@ManyToOne关系的实体的初始为false的boolean属性更改为true,然后又变回false时,它会导致数据库触发更新查询,将实体的boolean设置为false,这似乎是错
我正在寻找一种通过改变散列来改变部分样式的方法。让我以一个例子来解释: > 当前URL为: 然后单击复选框,URL将更改为: 我想更改类的。 我尝试了以下代码,但它不起作用: 实际上,每次哈希更改时,控制台中都不会出现任何内容。
我有一个表视图,每次都很好地填充, 我的主控制器: 我的测试类: 扩展测试类并覆盖其运行的Test1类: 我的aHandler: 因为tbl1绑定到Handler。getInstance()。GetData(),第一次初始化该类时,我看到列Test填充了值1,因为TestData=1;但当计时器开始更改测试数据时,表视图不会获得新的赋值。我做错了什么? 我尽我所能解释这个问题,请让我知道,如果它仍