Vue.js 一问一答

记录一下在学习 Vue 过程中给自己问的一些问题,持续更新中...

  1. Vue.js 的核心是什么?

    官网:Vue.js 的核心是一个允许采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统。

    以下面的例子来说明:

    // Vue 中的模板语法
    <div id="app">
      {{message}}
    </div>
    
    var app = new Vue({
      el: "#app",
      data: {
        message: "hello Vue"
      }
    })

    上面的例子中上面的 div 是 Vue 中的模板写法,通过模板语法将数据 message 渲染进了 DOM 中。

  2. 计算属性和计算方法有什么区别?

    计算属性有缓存机制,只有和它相关的属性改变时才会重新渲染,而计算方法则是只要属性变化就会改变。

    例: 全名 FullName 用计算属性和计算方法都可以实现,当用计算属性时,只要当名或姓改时才会重新渲染,而当用计算方法时,就算是改变年龄也会重新渲染。

    在这一点上,计算方法是优于计算属性的。

  3. 如何做到数组变化的时候页面跟着变化?

    • 使用 数组方法:push, pop, shift, unshift, splice, sort, reverse.

    • 改变数组的引用,比如给这个数组重新赋予一个新的数组。

    • 利用 set 方法修改数组的值,例如:

      Vue.set(vm.list, 1, 5) // 将 list 数组索引为1的项改为5
      // 或
      vm.$set(vm.list, 1, 5)
  4. 如何做到对象变化时页面跟着变化?

    • 如果是对象中已有的属性,那么改变这个属性的值页面就会跟着变化。
    • 如果往对象里面添加属性,那么页面不会跟着变化,想让其变变化可以改变对象的引用,比如给这个对象重新赋予一个新的对象。

    • 通过 set 方法给对象设置属性,页面也会跟着变化。例如:

      Vue.set(vm.userInfo, 'sala', 'secret')
      // 或
      vm.$set(vm.userInfo, 'sala', 'secret')
  5. 想要在 tbody, select, ul, ol 等元素中使用 VUe 组件应该怎么实现?

    由于它们的特殊性,直接将组件写在这些元素中,会发现组件虽然在页面上显示,但是它们并不包裹在这些标签之中。

    解决方法: 使用 is

    // 假设 row 是一个组件,想要作为 tbody 的子元素
    <table>
      <tbody>
        <tr is='row'></tr>
        <tr is='row'></tr>
      </tbody>
    </table>
  6. 说一下当点击子组件时子组件中的 number + 1,如何实现同时父组件中的 counter 也跟着 + 1 ?

    • 在子组件中定义事件处理函数,事件处理函数的内容:

      • 当点击子组件时实现子组件的 number + 1
      • 触发一个新的事件
    • 父组件捕获这个事件,父组件事件处理函数的内容是将子组件的number赋给父组件中的 counter。

    • 在父组件中如何获得子组件的number属性呢?

      可以在使用子组件时设置 ref 属性,这样在父组件的事件处理函数中就可以获得子组件中的数据了。

  7. 父子组件如何传值?

    • 父组件如何向子组件中传值?

      • 使用子组件时设置属性的方式

        <父组件>
          // 这样写时传给子组件的是一个字符串 "1"
          <子组件 count="1"></子组件>
          // 这样写时传给子组件的是数字1,因为这样写双引号后面的内容是一个JS表达式
          <子组件 :count="1"></子组件>
        </父组件>
    • 子组件如何向父组件传值?

      • 通过事件触发的方式

      在子组件中通过 this.$emit('触发的事件名', 向父组件传入的参数) 方式,触发一个事件,在使用子组件的地方捕获到这个事件,然后触发写在父组件事件处理函数。父组件的事件处理函数可以接受到从子组件传递过来的数据。

      当然也可以通过问题 6 中 ref 方式向父组件中传值,但是无论哪种方式都需要采用事件触发的方式。

    • 何为单向数据流,为什么要规定单向数据流?

      • 单向数据流指的就是子组件不能修改从父组件传递过来的数据。
      • 如果从父组件传递过来的数据是一个引用类型的话,在子组件中如果将其改变之后,那么父组件传递给其它组件时也将是修改之后的数据。

Vue.js 一问一答的更多相关文章

  1. [译]Node.js面试问与答

    原文: http://blog.risingstack.com/node-js-interview-questions/ 什么是error-first callback? 如何避免无休止的callba ...

  2. 定了,这个vue.js开源项目,面试时,一定会考问

     因为现在的网店,都是用的商城系统, 而实体店都是入座后,扫码打开网上商城进行选购(餐饮,超市等),所以,vue.js迅速开发网上购物商城系统成为了香饽饽, 本人开源2020年4月开发的购物商城系统, ...

  3. 前端框架本质之探究——以Vue.js为例

    问:我们在使用Vue时,实际上干了什么?   答:实际上只干了一件事——new了一个Vue对象.后面的事,都交由这个对象自动去做.就好像按了下开关,机器跑起来了,剩下的事就不用我们再操心了.   各位 ...

  4. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  5. vue.js 中 data, prop, computed, method,watch 介绍

    vue.js 中 data, prop, computed, method,watch 介绍 data, prop, computed, method 的区别 类型 加载顺序 加载时间 写法 作用 备 ...

  6. 前端面试:Vue.js常见的问题

    摘自今日头条用户:代码开发 原文链接: https://www.toutiao.com/a6683120112255369732/?tt_from=mobile_qq&utm_campaign ...

  7. Vue.js——vue-resource全攻略

    概述 上一篇我们介绍了如何将$.ajax和Vue.js结合在一起使用,并实现了一个简单的跨域CURD示例.Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的D ...

  8. Vue.js——基于$.ajax实现数据的跨域增删查改

    概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是local的.在实际的应用中,几乎90%的数据是来源于服务端的,前端和服务端之间的数据交互一般是通过ajax ...

  9. Vue.js 入门指南之“前传”(含sublime text 3 配置)

    题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...

随机推荐

  1. JSON的使用场景及注意事项介绍

    上篇我们讲解了JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Mornings ...

  2. 探索 IPv6 网络

    目录 0x00 前言 0x01 探索 服务器配置 IPv6 地址 服务器部署网络代理 客户端配置网络代理 测试访问 IPv6 地址 给博客添加 IPv6 地址 0x00 前言 IPv4 地址枯竭的事情 ...

  3. scrapy自动抓取蛋壳公寓最新房源信息并存入sql数据库

    利用scrapy抓取蛋壳公寓上的房源信息,以北京市为例,目标url:https://www.dankegongyu.com/room/bj 思路分析 每次更新最新消息,都是在第一页上显示,因此考虑隔一 ...

  4. Altium Designer 20.0.9

    Altium Designer 20.0.9 Download: http://dl3.downloadly.ir/Files/Software/Altium_Designer_20.0.9_Buil ...

  5. easywechat微信开发SDK之小微商户进件(一)

    微信本身不提供小微商户进件的SDK,偶然发现easywechat这么个东西,官网地址是https://www.easywechat.com/  整合了微信开发中常用的接口,包括微信公众号相关接口,微信 ...

  6. 02-kubeadm初始化Kubernetes集群

    目录 部署 组件分布 部署环境 kubeadm 步骤 基础环境 基础配置 安装基础组件 配置yum源 安装组件 初始化 master 导入镜像 执行命令: 查看组件状态 查看node状态 安装flan ...

  7. MySQL主从扩展知识

    6月29/7月2日任务 说明:这两天无新课,主要是扩充知识面注意:这两天的任务,需要回专贴.需要你们通过看这些东西总结成自己的心得. 不能照搬,必须要自己理解,能看多少就看多少,看不完也没有关系,但一 ...

  8. C# 子类与父类构造函数

  9. OC中ARC forbids explicit message send of release错误

    在ios编程中,如果成员变量为对象,我们需要对成员变量内存管理,否则,会造成内存泄露.即我们要对成员变量进行手动的内存释放. 很显然,是ARC的问题. 错误原因:在创建工程的时候点选了“Use Aut ...

  10. Java8 格式化时间

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");LocalDateTime. ...