vue面试题

2023-11-12

1、vue子组件调用父组件方法?

方法1:直接在子组件中通过this.$parent.event来调用父组件的方法
方法2:在子组件里用$emit向父组件触发一个事件,父组件监听这个事件就可以了。
方法3:在父组件把方法传入子组件中,在子组件里直接调用这个方法

2、vue等单页面应用及其优缺点?

单页Web应用的优点:

1、提供了更加吸引人的用户体验:具有桌面应用的即时性、网站的可移植性和可访问性。

2、单页应用的内容的改变不需要重新加载整个页面,web应用更具响应性和更令人着迷。

3、单页应用没有页面之间的切换,就不会出现“白屏现象”,也不会出现假死并有“闪烁”现象

4、单页应用相对服务器压力小,服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力会提高几倍。

5、良好的前后端分离。后端不再负责模板渲染、输出页面工作,后端API通用化,即同一套后端程序代码,不用修改就可以用于Web界面、手机、平板等多种客户端。

单页Web应用的缺点:

1、首次加载耗时比较多。

2、SEO问题,不利于百度,360等搜索引擎收录。

3、容易造成Css命名冲突。

4、前进、后退、地址栏、书签等,都需要程序进行管理,页面的复杂度很高,需要一定的技能水平和开发成本高。

3、vue-router路由有几种模式?说说它们的区别?

一般常用的有两种:hash模式和history模式

区别:

hash模式:
1、url路径会出现 # 字符
2、hash值不包括在 HTTP 请求中,它是交由前端路由处理,所以改变hash值时不会刷新页面,也不会向服务器发送请求
3、hash值的改变会触发hashchange事件
history模式:
1、整个地址重新加载,可以保存历史记录,方便前进后退
2、使用 HTML5 API(旧浏览器不支持)和 HTTP服务端配置,没有后台配置的话,页面刷新时会出现404

4、vue-cli怎么解决跨域的问题?

      可参考:vue-cli解决跨域问题_ahzhaihui的博客-CSDN博客_vue-cli解决跨域问题

5、使用vue开发过程是怎么做到接口管理的?

创建一个request.js用于封装axios,在 src/api/request,设置拦截器统一处理请求和相应。

封装 axios:request.js:

import axios from 'axios'
import {Message, Loading} from "element-ui"
import {getToken} from "@/utils/auth"

function Index({...config}) {
  // create an axios instance
  const service = axios.create({
    /*headers: {
      'Cache-Control': 'no-cache'
    },*/
    baseURL: config.baseURL || process.env.VUE_APP_BASE_API, // url = base url + request url
    // withCredentials: true, // send cookies when cross-domain requests
    timeout: 30000 // request timeout
  })

  // request interceptor
  service.interceptors.request.use(
    config => {
      return config
    },
    error => {
      return Promise.reject(error)
    }
  )

  // response interceptor
  service.interceptors.response.use(
    response => {
      return response
    },
    error => {
      const {request = {}} = error;
      const {status, response} = request;

      error.status = status
      try {
        error.res = JSON.parse(response)
      } catch (e) {
        console.warn(e)
      }
      return Promise.reject(error)
    }
  )

  /**
   * 发起请求
   * @param method 请求方法
   * @param url 请求地址
   * @param params 要发送的数据
   * @param config 配置
   * @param axiosConfig Axios配置项
   * @returns {Promise<never>|Promise<AxiosResponse<T>>}
   */
  const requestProcessor = (method, url, params, config, axiosConfig) => {
    const headers = {}
    const token = getToken().token
    if (token) {
      // let each request carry token
      headers['Authorization'] = 'JWT ' + token
    }

    if (config.formData) {
      const fd = new FormData();
      for (let key in params) {
        fd.append(key, params[key])
      }
      params = fd
    }

    switch (method.toUpperCase()) {
      case 'GET':
        return service.get(url, {
          params,
          headers,
          ...axiosConfig,
        })
      case 'POST':
        return service.post(url, params, {
          headers,
          ...axiosConfig,
        })
      case 'DELETE':
        return service.delete(url, {
          params,
          headers,
          ...axiosConfig,
        })
      case 'PUT':
        return service.put(url, params, {
          headers,
          ...axiosConfig,
        })
      default:
        return Promise.reject(new Error(`${method} 方法无效,请用正确的请求方法`))
    }
  }

  this.service = async ({method, url, params, config = {}, axiosConfig = {}}) => {
    const {isLoading = true, isToast = true} = config

    let loadingInstance
    isLoading && (loadingInstance = Loading.service({
      fullscreen: true,
      background: 'transparent',
      text: '加载中...'
    }))

    try {
      const response = await requestProcessor(method, url, params, config, axiosConfig)
      // 此处可以再次拦截
      return response.data
    } catch (error) {
      isToast && Message.error(error.message)
      throw error
    } finally {
      isLoading && loadingInstance.close()
    }

  }
}

export const {request} = new Index()
export default Index

接口 listing.js:

import Request from "@/api/request"

const {service} = new Request()

export default {
  userPostList({pageSize, page}) {
    return service({
      method: 'get',
      url: '/userpostlist/',
      params: {
        pageSize,
        page
      },
      config: {
        isLoading: false
      }
    })
  }
}

在 Vue 组件中使用:

import listing from "@/api/listing"

export default {
    mounted() {
      this.getList()
    },
    methods: {
      getList() {
        this.isLoading = true

        listing.userPostList({
          pageSize: this.pageSize,
          page: this.currentPage,
        }).then(data => {
          this.currentPage = parseInt(data.currentPage)
          this.total = data.total
          this.list = data.results

        }).finally(() => {
          this.isLoading = false
        })
      }
    }
}

6、vue与原生app交互?vue与app的交互方法?

通过url传输数据:(一般是在入口页面传下app的用户信息进来供vue h5使用)

methods: {
      // 接收url后的数据
      urltext() {
        let loc = location.href;  6         let n1 = loc.length;//地址的总长度
        let n2 = loc.indexOf("=");//取得=号的位置
        let outToken = loc.substr(n2 + 1, n1 - n2);//从=号后面的内容
        console.log(loc,n1,n2,outToken)
        this.outTokenPost(outToken) //传到处理函数
      },
}

原生APP提供一个接口对象的引用(例如一个扫码的接口,可能还有回调函数以获得扫码结果)

思路就是万物通过window 进行交互

// 将vue组件的要回调的函数暴露出去
mounted:function(){
      
        // 将subscanQRCallBack方法绑定到window下面,提供给外部调用
        window['scanQRCallBack'] = (result) => {
          this.subscanQRCallBack(result)
        }
   
    },

methods:{
      scan(){
        // alert('开始扫码了')
        window.client.startScanQR('OS与js交互',scanQRCallBack)  // 通过window调用app提供的client对象
      },

      subscanQRCallBack(result){
        // alert('扫码结果6466:'+result);
        this.scanPost(result)
      },
}

7、vue组件间通信有哪几种方式?

一般组件通信可用:props、 $emit

更多及详细可参考:Vue 组件间通信六种方式(完整版)_张飞鹏的博客-CSDN博客_vue组件通信

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue面试题 的相关文章

随机推荐

  • QT入门Input Widgets之QLineEdit

    目录 一 界面布局功能 1 界面位置介绍 2 控件界面基本属性 二 属性功能介绍 1 获取输入的文本内容 2 设置密码样式效果 3 设置不可见性 4 清除文本内容 5 设置光标聚焦 三 Demo展示效果 本文为作者原创 转载请标明出处 一
  • 微信小程序连接蓝牙设备流程(一)

    微信小程序的特点是无需下载App 只要是安装有微信的一部智能手机 几乎就可以运行微信小程序 基于这个特点 我设计了一款小程序版的蓝牙串口助手 适用于简单的蓝牙串口调试工作 从事蓝牙相关产品研发的兄弟们知道 手机端的像LightBlue BL
  • java--基础--20.1--反射--基础

    java 基础 20 1 反射 基础 1 介绍 反射 就是通过class文件对象 去使用该文件中的成员变量 构造方法 成员方法 1 1 测试用的类 public class User private String name int id p
  • 5.Java编程基础

    个人简介 作者简介 大家好 我是W chuanqi 一个编程爱好者 个人主页 W chaunqi 支持我 点赞 收藏 留言 愿你我共勉 没有什么比勇气更温文尔雅 没有什么比怯懦更冷酷无情 文章目录 Java编程基础 1 Java基本语法 1
  • 平衡二叉树(AVL树)

    平衡二叉树树专题 存储 基本操作 插入 代码来源 晴神 算法笔记 平衡二叉树定义 左右子树高度之差的绝对值不超过1 存储 struct node int data height node lchild rchild 新建结点 node ne
  • 【Interpreter模式】C++设计模式——解析器

    解析器 一 设计流程探讨 二 模式介绍 三 代码实现 C 设计模式大全 23种设计模式合集详解 点我跳转 一 设计流程探讨 您的团队希望开发一款能解析特定语言的系统 如解析系统传入的字符串a b c d 此时abcd是不确定的 这个字符串只
  • 新型的刷脸支付方式给人们生活带来很多便利

    随着科技的飞速发展 人们的支付方式发生了巨大的改变 从传统的现金支付逐渐演变到移动支付 出门可以身无分文 仅仅揣上一台手机就能走天下 如今最流行的两大支付端是支付宝和微信支付 新型的支付方式给人们生活带来诸多的便利 就比如说 如果你不想在家
  • Unity 创建模型并让模型动态运动

    最近项目要实现一个做正弦运动的线条 我想到的方案是改变模型的顶点 利用函数y aSin bx C 让模型顶点的Y坐标 根据X坐标运动 这样就实现如下图的运动 废话不多说 是骡子是马拿出来遛一遛 来看一张效果图 好 开始说如何实现 首先新建一
  • opencv答题卡识别

    最近做了一个答题卡识别项目 主要是利用opencv图像处理方法识别答题卡 登录界面 主界面 图片 识别结果 代码部分 主程序main py import sys cv2 from PyQt5 QtGui import from PyQt5
  • 机器学习四 KNN算法

    KNN算法 前言 一 距离常量 二 KNN算法步骤 三 算法优点 四 算法缺点 五 代码示例 前言 KNN解决的是分类问题 k Nearest Neighbor算法 也叫K最近邻算法 K近邻算法KNN就是给定一个训练数据集 对新的输入实例
  • 三款程序员必备神器,爆炸!

    精致 简洁 极客范 想必是每个程序员的终生追求 从此篇文章中您将得到三款免费神器 良心到爆炸 第一 二款 哎 为啥是第一 二款呢 因为这两款神器配合使用的话效果增益 Android WIFI ADB Vysor 最近经常听同学们 即将毕业的
  • deep feature flow

    因为如果将图片识别的网络直接引入视频中的帧 就会发现计算量就会很大 作者提出的这个网络利用的是 1 fowl estimetion feature propagation 比一般的卷积计算速度快很多 2 在空间上找一个关键帧做图像识别 然后
  • 基于协同过滤算法和深度学习的音乐推荐

    基于协同过滤算法和深度学习的音乐推荐 协同过滤 音乐推荐 深度学习 音乐检索 文章目录 基于协同过滤算法和深度学习的音乐推荐 Github 地址 微信小程序版实现 介绍 参考项目 技术栈 Docker 部署 如用此方式部署 后面的手动安装步
  • SpringBoot中整合fastjson,自定义jackson、gson

    如今炒的火热的前后端分离项目 大多数开发人员选择RESTful设计风格 Java Web 人员经常要设计 RESTful API 这种设计通常使用 json 数据进行交互 那么前端传入的 json 数据如何序列化成 Java 对象 后端返回
  • Shell编程规范

    目录 1 Shell脚本概述 1 1shell的作用 1 2Shell脚本应用场景 1 3Shell脚本概念及构成 1 4脚本执行逻辑及执行方式 1 4 1指定路径去执行文件 需要有执行权限 1 4 2指定解释器去执行 不需要权限 1 4
  • PHP实现阿里云金融级实人认证人脸识别h5案例源码,带签名

    PHP部分 本代码段为项目中的代码 部分参数接收方式和路径请自行更改
  • linux hook

    http www codeproject com Articles 33340 Code Injection into Running Linux Application
  • 软件测试面试,一定要准备的7个高频面试题

    问题1 请自我介绍下 核心要素 个人技能优势 工作背景 经验亮点 参考回答 第一种 基本信息 离职理由 面试官您好 我叫张三 来自番茄市 在软件测试行业有 3 年的工作经验 做过 Web APP及小程序项目的测试工作 有独立负责整个项目的测
  • java -jar运行程序,但是断开服务器连接,就会关闭问题

    1 nohup java jar XXX jar gt log out 解析 把此进程作为后台进程运行 且把日志输出到log out文件中 2 指定jdk 进行项目启动 JAVA HOME bin java Xms 256m Xmx 102
  • vue面试题

    1 vue子组件调用父组件方法 方法1 直接在子组件中通过this parent event来调用父组件的方法 方法2 在子组件里用 emit向父组件触发一个事件 父组件监听这个事件就可以了 方法3 在父组件把方法传入子组件中 在子组件里直