Vue初体验

213 阅读4分钟

Vue


Vue安装

1.安装的方式 可以通过直接导入src

// 这是开发环境,有帮助的命令行警告
<script     src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
// 这是生产环境 优化了速度
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

runtime.js(非完整版) 和 vue.js(完整版)的区别

2.根据vue文档,我们还可以看到区分不同构建版本,我们会对runtime和完整版区别进行简单的描述:

  1. 首先完整版的vue可以从html中直接获取视图,在html中直接可以使用{{value}}模板字符串,但是非完整版却不支持,非完整版没有compiler(用来将模板字符串编译成为 JavaScript 渲染函数的代码。)功能

  2. 非完整版运行时版本相比完整版体积要小大约 30%,非完整版在渲染时需要这样添加到html中

  3. 通过cdn引入时,引入的代码也不同

https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js // 完整版
https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.runtime.common.js // 非完整版
new Vue({
	render(h){
		return h('div',[this.n, h('button',{on:{click: this.add}})])
	},
	data: {
		n: 0
	}
})

以上的代码是非完整版实现传入数据的方法,h是尤雨溪写好传给render的

Vue/cli


vue/cli安装

yarn global add @vue/cli // 安装脚手架的命令
vue --version // 查看脚手架的版本
vue create '名字' // 创建一个Vue

image-20210124203215169

选择一个配置,第一个是默认的,第二个是自己选择配置

选择自己需要的内容. 空格选择 使用哪种css的版本

使用哪种eslint 代码编辑限制

什么时候判断eslint错误

配置文件分开放还是一起放在package.json

yarn server // 开启dev-server 进行实时预览

声明式渲染


1.直接渲染

<div id="app">
  <span v-bind:title="message">
    鼠标悬停几秒钟查看此处动态绑定的提示信息!
  </span>
</div>
new Vue({
  el: '#app', // 挂载到id为app上的节点
  data: {
    message: '页面加载于 ' + new Date().toLocaleString() // 动态的绑定了信息
  }
})

这里就是通过v-bind 动态的绑定了数据,message的数据是实时变动的,当页面刷新后将会跟着做变动

2.条件与循环

<div id="app-3">
  <p v-if="seen">现在你看到我了</p>
</div>
var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})

这里是通过v-if来控制p的显示和隐藏,当v-if="true时将会显示,当为false时将会隐藏

3.for循环渲染

<div id="app-4">
  <ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ol>
</div>
var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: '学习 JavaScript' },
      { text: '学习 Vue' },
      { text: '整个牛项目' }
    ]
  }
})

这里v-for会进行遍历.语法就是v-for='item in items',item获取到的是每个数组的内容,然后会添加li,自动加上item.text的值

4.处理用户输入

<div id="app-5">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">反转消息</button>
</div>
var app5 = new Vue({
  el: '#app-5',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

在vue中,可以通过v-on:方法='函数',来给当前节点绑定事件,在该例子中绑定了点击事件,然后调用了reverseMessage函数,函数一般都需要卸载methods内

<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>
var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!'
  }
})

v-model是双向绑定,在input中绑定v-model='对应的data'即可完成双向绑定,当input内容改变后,message的数据也会改变

数据响应式

set/get


数据响应式,其实就是指当数据发生变化时,页面的内容同时也会发生变化.在Vue中的使用了ES6中的新方法getter/setter,在此我们先简单的介绍一下getter和setter
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

var o = {}; // 创建一个新对象
var bValue = 38;
Object.defineProperty(o, "b", {
  get() { return bValue; },
  set(newValue) { bValue = newValue; },
});
o.b; // 38

这上面在o对象中添加了一个b为虚拟属性,这里可以直接通过get获取b的值,不需要再调用函数,同时也可以通过set直接设置b的值.

vue应用Object.defineProperty

Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。 并没每一个属性都绑定了watch函数,只要当数据发生变化时,就会重新渲染界面. 但是通过Object.defineProperty会有BUG,由于 Object.defineProperty(o,'s',{})时必须要有一个s才能进行监听.现在可能会出现以下的两种情况

  1. 若未在data内写s,则会报错
  2. data内的属性为一个对象时,若未在第一层写要被监听的内容,即使后续通过点击事件等在对象内添加也不会再次渲染出现 解决方法
  3. 在一开始的时候就先为要设置的属性设置一个初始值(null/undefined)
  4. 使用Vue.set(this.o, 's', 1) 设置一个初始值,为1

总结


本篇文章为大家讲述了如何引入vue,同时一些vue/cli 脚手架的基本操作,通过脚手架会很大的方便我们的vue项目进行初始化,但是若有更多高级的需求还是需要我们自己通过webpack进行配置,同时介绍了一些简单的v-指令,最重要的是vue实现数据响应式的方案,主要是通过Object.defineProperty实现的,希望该篇文章对大家有所帮助.
记得持续学习,不断跟进!加油!