我目前正在尝试使Angular 2 Observable的timeout()方法正常工作,但在所有教程中都有similair代码,其中timeout()方法的第二个参数是一个简单的错误:
return this.http.get('http://...')
.timeout(2000, new Error('Timeout exceeded'));
Run Code Online (Sandbox Code Playgroud)
但是当我复制这段代码时,TypeScript会说第二个参数的类型无效,并且希望看到实现接口IScheduler的 smth .
解决问题的方法之一是创建实现IScheduler接口的新类,但它具有我不熟悉的功能(now()方法和任务).
有谁知道,我应该这样做还是有其他办法使事情有效?如果不是错误我想放置一些回调函数怎么办?
目前我正在为 Vue.js 应用程序编写测试并遇到问题:如果有一些路由测试,href则在每个下一个测试中都会根据以前的测试修改路径。
例如,如果在第一个测试中我模拟点击一个链接href='document/123'并检查vm.$router.history.path,它将正确显示document/123,但如果在下一个测试中我将尝试做同样的事情,vm.$router.history.path将显示document/document/123并继续在路径中添加“文档”与每个下一个测试。
这很奇怪,看起来router在describe块中的所有测试期间都保持存在,即使我有beforeEach钩子在那里我重新初始化Vue和所有插件的使用以及Vue-router和afterEach钩子我$destroy()在Vue实例上调用方法。
有什么方法可以修改或重置钩子中的vm.$router.history对象或其属性,afterEach还是我错过了其他东西?
下面是测试代码:
import Vue from 'vue'
import Search from '../../../src/Search.vue';
import router from '../../../src/router';
describe('Search', () => {
let vm;
beforeEach((done) => {
const container = document.createElement('div');
vm = new Vue({
router,
render: h => h(Search),
}).$mount(container);
done();
});
afterEach((done) => {
vm.$destroy(); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用Nuxt.js作为 SSR 引擎和Vuetify作为样式框架的项目。在我的模板之一中,我有这样的代码:
<v-layout row wrap align-center
:class="{ 'mb-4': $vuetify.breakpoint.smAndDown }">...</v-layout>
Run Code Online (Sandbox Code Playgroud)
如您所见,只有在小屏幕和小屏幕上时,我才想应用mb-4类。但是当我在桌面大屏幕上加载它并检查元素时,即使屏幕分辨率与应用此类的逻辑不匹配,也会附加此类。但是,当我调整浏览器窗口大小时,样式会恢复到预期状态。
我尝试在生命周期钩子中手动调度'resize'事件:
mounted() {
window.dispatchEvent(new Event('resize'));
}
Run Code Online (Sandbox Code Playgroud)
但它没有帮助。即使我把它包起来setTimeout,仍然没有运气。
UPD:找到了解决方法,但仍然认为这不是最佳解决方案:已更改
:class="{ 'mb-4': $vuetify.breakpoint.smAndDown }"
Run Code Online (Sandbox Code Playgroud)
到
:class="{ 'mb-4': isMounted && $vuetify.breakpoint.smAndDown }"
Run Code Online (Sandbox Code Playgroud)
并在mounted生命周期钩子中添加:this.isMounted = true
更新:在挖掘 Vuetify 源代码时发现,它以 200 毫秒的延迟检查窗口宽度,因为窗口宽度检查是一项代价高昂的操作。这就是为什么我们有延迟。
为了提高灯塔得分,我需要启用gzip和/或brotli压缩,以便提高性能得分。我在nuxt.config.js文件中添加了两个webpack插件:
plugins: [
new CompressionPlugin({
filename: `[path].gz[query]`,
algorithm: `gzip`,
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8
}),
new BrotliPlugin({
asset: `[path].br[query]`,
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8
})
]
Run Code Online (Sandbox Code Playgroud)
我可以确认,在添加这两个插件实际上是创造.gz和.br我的文件版本。
主要问题是:为了发送这些压缩文件,我是否应该对我的nuxt配置文件做一些额外的操作,否则nuxt会自行处理?是否可以检查localhost(brotli例如,因为我已经读过,仅适用于HTTPS协议)?
PS我不使用任何框架express或restify
nuxt.js ×2
vuejs2 ×2
angular ×1
brotli ×1
gzip ×1
http ×1
observable ×1
timeout ×1
unit-testing ×1
vue-router ×1
vue.js ×1
vuetify.js ×1
webpack ×1