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. python_08

    一.作业 ''' 主页: 图标地址.下载次数.大小.详情页地址 详情页: 游戏名.好评率.评论数.小编点评.下载地址.简介.网友评论.1-5张截图链接地址. https://www.wandoujia ...

  2. 扛把子组20191031-2 Beta阶段贡献分配规则

    此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9910 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 刘信鹏 B ...

  3. 30L,17L,13L容器分油,python递归,深度优先算法

    伪代码: 全部代码: a=[] b=[] def f(x,y,z): b.append([x,y,z]) if x==15 and y==15: print(x,y,z) i=0; for x in ...

  4. es6 every的使用

    let arr2 =[1,3,5,7,9,10]; //arr2.every() 数组里面所有的元素都有符合条件,才返回true var b =arr2.every(function (val,ind ...

  5. day02_Requests模块

    1.anaconda的安装 1.1 .安装可执行程序 1.2 .配置环境变量 ​ 根据环境变量的先后顺序去查找可执行程序文件,如果查找到就执行,如果查找不到就报错. ​ anaconda主要配置: ​ ...

  6. Spring Cloud报错Error creating bean with name 'requestMappingHandlerMapping'

    如果我们使用Spring Cloud的Feign实现熔断,首先需要自定义一个熔断类,实现你的feign接口,然后实现方法,这些方法就是熔断方法,最后需要在你的feign接口中指定fallback为自定 ...

  7. Chapter 06—Basic graphs

    三. 柱状图(Histogram) 1. hist():画柱状图 ·breaks(可选项):控制柱状图的小柱子的条数: ·freq=FALSE:基于概率(probability),而非频率(frequ ...

  8. Django中间件详解

    Django中间件详解 中间件位置 WSGI 主要负责的就是负责和浏览器和应用之家沟通的桥梁 浏览器发送过来一个http请求,WSGI负责解包,并封装成能够给APP使用的environ,当app数据返 ...

  9. linux中安装tensorflow

    liunxsudo apt-get install python-pip python-dev python2.X -> pippython3.X -> pip3 pip --versio ...

  10. 微信小程序——页面栈

    刚开始用小程序的时候没怎么在意页面的跳转,也没仔细看文档中说的页面栈的内容.只要能跳转就行,wx.navigateTo,wx.redirectTo 这些方法一顿乱用.最后在做一个十层页面(以前页面栈是 ...