Vue 实例化

  1. const vm = new Vue

把Vue的实例命名为

vm是尤雨溪的习惯,我们应该沿用

vm对象封装了对视图的所有操作,包括数据读写、事件绑定、DOM更新

vm的构造函数是Vue,按照ES6的说法,vm所属的类是Vue

optioins是new Vue的参数,一般称之 为选项或构造选项。

28 Vue里面的options - 图1

options里面有什么

数据: data、props、propsData、computed、methods、watch
DOM: el、 template、 render、 renderError
生命周期钩子: beforeCreate、 created、beforeMount、mounted、 beforeUpdate、 updated、activated、deactivated、 beforeDestroy、 destroyed、errorCaptured
资源: directives、 filters、 components
组合:parent、mixins、 extends、 provide、 inject

el(挂载点)

你想挂在到那个节点上

  1. // 网页上有个#app节点
  2. <div id="app">{{n}}</div>
  3. // 挂载节点
  4. new Vue({
  5. el: "#app"
  6. })

data(内部数据)

尽量使用函数。

原因:假如引入的是一个以xxx.vue结尾了。在同一个网页引用2次。

  1. render: hh(X, [h(Demo), h( Demo)])
  2. // new Vue( Demo), Demo._ data = Demo.data( );
  3. // new Vue(Demo), Demo._ data = Demo.data( );

会出现在同一个数据引用2次,如果其中一次修改了data数据 那么机会将xxx.vue里面的data数据修改;如果它是一个函数,那么外部的引用就是调用这个函数,不会修改它。

  1. data() {
  2. return {
  3. n: 0
  4. }
  5. }

组件:可以组合的物件

methods

在methods的方法中进行声明,我们声明一个add方法 用于加1操作。

  1. var vm = new Vue({
  2. data: { a: 1 },
  3. methods: {
  4. add: function () {
  5. this.a++
  6. }
  7. }
  8. })
  9. vm.plus()
  10. vm.a // 2

调用就是

  1. <div id="app">
  2. {{ a }}
  3. <p><button @click="add">add</button></p>
  4. </div>

components(构造器)

用于引用其他的Vue组件的

  1. components: {
  2. Frank:{
  3. template:`
  4. <div>demo2222</div>
  5. `
  6. }
  7. },

引用

  1. template: `
  2. <div>
  3. <button @click="toggle">toggle</button>
  4. <hr>
  5. <Demo v-if="visible === true"/>
  6. <Frank/>
  7. </div>
  8. `,

四个钩子

created

在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),property 和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el property 目前尚不可用。

mounted

实例被挂载后调用,这时 el 被新创建的 vm.28 Vue里面的options - 图2el 也在文档内。

updated

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

注意 updated 不会保证所有的子组件也都一起被重绘。如果你希望等到整个视图都重绘完毕,可以在 updated 里使用 vm.$nextTick:

destroyed

实例销毁后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。

props(外部属性)

Demo.vue代码

  1. <template>
  2. <div class="red">
  3. 这里是Demo的内部
  4. {{ message }}
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. props: ["message"],
  10. };
  11. </script>
  12. <style scoped>
  13. .red {
  14. color: red;
  15. }
  16. </style>

main.js代码

  1. const Vue = window.Vue
  2. Vue.config.productionTip = false
  3. import Demo from './Demo.vue'
  4. new Vue({
  5. components: {
  6. Demo
  7. },
  8. data: {
  9. visible: true
  10. },
  11. template: `
  12. <div>
  13. // 如果这里的message传的不是字符串,那么就得写如下代码
  14. // <Demo :message="n">
  15. <Demo message="你好 props">
  16. </div>
  17. `,
  18. }).$mount('#app')