小编BT1*_*101的帖子

Route Guard vue3 中的参数(route、from、next)类型

我导出一个函数,并将其传递给router.beforeEach

export default function (route, from, next) {
  log.debug(route.path)

  if (!identity.state.authenticated) {
    log.debug('redirecting to "login" view...')
    next({ name: 'login' })
  } else {
    next()
  }
}
Run Code Online (Sandbox Code Playgroud)

但这会导致 3 个 TypeScript 错误:

TS7006: Parameter 'route' implicitly has an 'any' type.
TS7006: Parameter 'from' implicitly has an 'any' type.
TS7006: Parameter 'next' implicitly has an 'any' type.
Run Code Online (Sandbox Code Playgroud)

什么类型最适合这些人?我可以让它们只是对象,但是没有一些类型可以从中导入吗vue

typescript vue.js vuejs3

4
推荐指数
1
解决办法
2560
查看次数

在程序顶部创建电子透明窗口,但在程序下方可单击

我创建了电子应用程序,单击按钮会显示另一个窗口,该窗口的高度和宽度为 100%,并且其区域周围有边框。它也是透明的,因此您可以看到窗口后面的内容。

现在我想知道我是否能够使下面的内容可点击,或者我需要创建某种黑客,例如这个新的透明窗口,使其非常小,并以某种方式扩展该窗口的边框。

负责创建新透明窗口的代码是:

const electron = require('electron');
const { app, BrowserWindow, Menu } = electron;

let mainWindow;
let addWindow;
let createTransparentWindow;

app.on('ready', () => {
    mainWindow = new BrowserWindow({});
    mainWindow.loadURL(`file://${__dirname}/index.html`);
    const mainMenu = Menu.buildFromTemplate(menuTemplate);
    Menu.setApplicationMenu(mainMenu);

    const mainScreen = electron.screen.getPrimaryDisplay();
    createTransparentWindow = () => {
        addWindow = new BrowserWindow({
            width: mainScreen.size.width,
            height: mainScreen.size.height,
            transparent: true,
            frame: false,
            alwaysOnTop: true,
        });
        addWindow.loadURL(`file://${__dirname}/transparentWindow.html`)
    };
});


const menuTemplate = [
    {},
    {
        label: 'Record',
        submenu: [
            {
                label: 'TransparentWindow',
                click() {
                    createTransparentWindow();
                } …
Run Code Online (Sandbox Code Playgroud)

javascript window electron

3
推荐指数
1
解决办法
4728
查看次数

Vue3 可组合渲染

是否可以创建一个使用渲染函数的可组合函数,以便它可以显示某些内容?

例子:

import { h } from 'vue'

export function useErrorHandling() {
  return {
    render() {
        return h('div', { class: 'bar', innerHTML: 'world!' })      
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
<script setup>
import { useErrorHandling } from './mouse.js'

 useErrorHandling()
</script>

<template>
 hello
</template>
Run Code Online (Sandbox Code Playgroud)

与上面的例子的plaground

vue.js vue-render-function vuejs3 composable

3
推荐指数
1
解决办法
1620
查看次数

NUXT 中的 SSR vuex 存储

我正在开发 vue2+nuxt 应用程序,我正在使用 vuex+persisted state 包。在其中一个组件中,我根据状态布尔变量显示带有条件的 div:

<template>
    <div class="nav__topbar" v-if="show">
         ....
    </div>
</template>
<script>
    export default {
        computed: {
            show() {
                return this.$store.state.navInfo.navInfo
            }
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

一切正常 - 如果this.$store.state.navInfo.navInfo为真,则显示,否则显示消失。同样在刷新后它仍然有效。

我无法解决的唯一问题是,在刷新 div 显示一秒钟后布尔值为 false 时。它在说 0.2 秒后消失了,但即使它如此之快,它仍然会使页面“跳跃”,因为它.nav__topbar是 100% 宽度和 20vh 高度。因此,有一段时间我可以看到这个 div,然后它会隐藏并且所有页面都跳起来,这看起来非常难看,我无法忽略它。

有什么办法可以防止这种行为吗?


也许我可以使用 Nuxt 提供的这个 fetch() 或 asyncData 钩子?

vue.js server-side-rendering vuex vuejs2 nuxt.js

2
推荐指数
1
解决办法
4432
查看次数

查找最近的 x,y 坐标

我有我当前所在位置的坐标(x,y)以及带有目的地坐标的对象数组。

坐标 x 和 y 仅代表地图中的字段,如下所示:

在此输入图像描述

最大可达 100x100。

myPosition是数组:[ 13, 11 ]其中 13 是 x,11 是 y(在上面的 jpg 中示范性地将其标记为红色)。

destinations是对象数组:

[ { x: 22, y: 13 },
{ x: 16, y: 25 },
{ x: 20, y: 11 },
{ x: 76, y: 49 },
{ x: 65, y: 47 },
{ x: 82, y: 33 },
{ x: 86, y: 35 },
{ x: 61, y: 59 },
{ x: 62, y: 52 },
{ …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm

2
推荐指数
1
解决办法
4992
查看次数

已打开的新拉取请求

我已经从我的 fork 分支创建了项目的拉取请求。回购所有者在代码审查后会接受它,但可以等待一段时间,因为他目前很忙。我不想等待,在我的分支中的全新分支上,我实现了下一个功能。

如果现在我创建新的拉取请求,它会与之前的拉取请求合并并创建一个巨大的拉取请求吗?或者会有两个单独的PR?我担心它会合并,因为在 GH 的提交字段中我看到了以前 PR 的提交。

git pull-request

2
推荐指数
1
解决办法
4350
查看次数

将desktopCapturer从Electron应用程序保存到视频文件

根据电子 API这个问题,我试图将录制的用户屏幕保存到根应用程序文件夹中视频文件夹中的 .webm 文件。

实际上它几乎可以工作,因为它保存了 .webm 文件,但保存的文件是空的,它的重量为 0B.. 我不知道我在这里缺少什么。

示例文件为 0 字节

所以看起来由于文件为空而无法正确录制。

调试时进行编辑我发现记录可能正常工作,因为我控制台记录的 blob 内部具有价值,而在toArrayBuffer我的 blob 内部不再具有价值之后。

代码是:

(function () {
    'use strict';

    var fs = require('fs');
    var { desktopCapturer } = require('electron');
    var recorder, blobs = [];

    angular
        .module('app')
        .controller('loggedScreen', Controller);

    Controller.$inject = ['$scope'];

    function Controller($scope) {

        var startRecord = function () {
            console.log('started');
            desktopCapturer.getSources({types: ['window', 'screen']}, function(error) {
                if (error) throw error;
                navigator.webkitGetUserMedia({
                    audio: false,
                    video: {
                        mandatory: {
                            chromeMediaSource: 'desktop',
                            minWidth: 1280, …
Run Code Online (Sandbox Code Playgroud)

javascript blob getusermedia electron mediastream

1
推荐指数
1
解决办法
1601
查看次数

Safari 阻止 video.js 播放器的自动播放

在我的网站上,我有使用 video.js 库的 vue-video-player。在三星 Galaxy s9 的移动版 chrome 上,它可以正确自动播放,但在 iphone 7 的移动版 Safari 上无法自动播放。

HTML是:

<video-player  class="video-player-box"
               id="player"
               ref="videoPlayer"
               :options="playerOptions"
               @ended="onPlayerEnded($event)">
</video-player>
Run Code Online (Sandbox Code Playgroud)

在我的脚本标签中:

data() {
    return {
        playerOptions: {
            muted: true,
            autoplay: true,
            controls: false,
            sources: [{
                type: "video/mp4",
                src: "https://res.cloudinary.com/dlqvkenro/video/upload/v1544320787/gvnn.mp4"
            }],
            poster: "/static/images/author.jpg",
        }
    }
},
Run Code Online (Sandbox Code Playgroud)

实际上在 safari 中,当我单击声音图标视频开始播放时,我希望它在用户进入页面时自动启动。

我添加了代码来以编程方式启动播放器:

mounted() {
    this.player.play()
        .then(() => {
            console.log('play succseed');
        })
        .catch(() => {
            alert('safari prevent player');
        });
},
Run Code Online (Sandbox Code Playgroud)

实际上在 safari 中出现警报。有什么办法可以战胜苹果吗?

演示

javascript safari video.js vue.js vuejs2

1
推荐指数
1
解决办法
4707
查看次数

使用 set.has 进行过滤无法按预期工作

我试图通过Set.has这样的方式过滤数组:

const input = [ 
  { nick: 'Some name', x: 19, y: 24, grp: 4, id: '19340' },
  { nick: 'Some name', x: 20, y: 27, grp: 11, id: '19343' },
  { nick: 'Some name', x: 22, y: 27, grp: 11, id: '19344' },
  { nick: 'Some name', x: 22, y: 30, grp: 11, id: '19350' },
  { nick: 'Some name', x: 22, y: 12, grp: 23, id: '19374' },
  { nick: 'Some name', x: 22, y: 29, …
Run Code Online (Sandbox Code Playgroud)

javascript arrays filter

1
推荐指数
1
解决办法
859
查看次数

猫鼬模式对象数组

我有这样的大对象:

const example = {
    startMap: 'Something',
    monsters: [],
    monstersToOmit: [],
    mapsOrder: [1, 2],
    mapsData: [
        {
            id: 1,
            name: 'lol',
            gates: [
                {
                    toId: 2,
                    coords: {
                        x: 49,
                        y: 28
                    }
                }
            ],
            waypoints: [
                [
                    {x: 81, y: 50},
                    {x: 53, y: 59},
                    {x: 64, y: 15},
                    {x: 87, y: 20}
                ],
                [
                    {x: 93, y: 54},
                    {x: 90, y: 10},
                    {x: 67, y: 16},
                    {x: 51, y: 54}
                ],
                [
                    {x: 86, y: 57},
                    {x: 77, …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js

1
推荐指数
1
解决办法
652
查看次数

将表单数据 POST 中的数组发送到 PHP 端点

我将 http 请求中的值发送到我的 PHP 端点。我以前是这样做的:

let params = new URLSearchParams();
params.append('postName', 'value');
Run Code Online (Sandbox Code Playgroud)

但现在我需要发送数组我尝试了多种方式

params.append('postName', ["value1", "value2"]);
Run Code Online (Sandbox Code Playgroud)

这转换为字符串 value1,value2

params.append('postName', 'value1');
params.append('postName', 'value2');
Run Code Online (Sandbox Code Playgroud)

这只是发送两个字符串。我如何传递数组?

我正在使用这个 URLSearchParams,因为否则当我只发送对象或数组时,$_POST['postName']在 php 端点中不可用。

javascript php parameters

1
推荐指数
1
解决办法
212
查看次数

将 params 对象序列化为 url

我们有这样的输入

const params = {
  id: 1,
  filters: {
    price: {
      min: 101,
      max: 300
    }
  },
  sorters: {
    sortBy: 'price',
    order: 'desc'
  }
}
Run Code Online (Sandbox Code Playgroud)

我们希望输出看起来像这样id=1&min=101&max=300&sortBy=price&order=desc

对象是嵌套的。如果我们的对象只有 1 级(对象内没有对象),那么我们可以简单地这样做

for (const [key, value] of Object.entries(object1)) {
  arr.push(`${key}=${value}`);
}
Run Code Online (Sandbox Code Playgroud)

然后可能.join用 数组&。但在本例中这还不够。我的第一个想法是将这个 for 循环放入内部,如下所示:

const paramsStringify = (paramsObject) => {
  const arr = []
  
  for (const [key, value] of Object.entries(paramsObject)) {
    if(typeof value === 'object') {
      for (const [key2, value2] of Object.entries(value)) {
        if(typeof value2 === …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm loops object

1
推荐指数
1
解决办法
2845
查看次数

将数组和字符串合并到数组中

我有这样的输入:

const a = 'lol',
      b = ['1','2','3'],
      c = 'c';
Run Code Online (Sandbox Code Playgroud)

我想合并它,这样输出就是这个数组:

['lol', '1', '2', '3', 'c']
Run Code Online (Sandbox Code Playgroud)

我试过像这样的传播运算符

const arr = [...a, ...b, ...c]
console.log(arr)
Run Code Online (Sandbox Code Playgroud)

但它安慰

["l", "o", "l", "1", "2", 3, "c"]

javascript arrays

0
推荐指数
1
解决办法
60
查看次数