weex基础知识

2019-08-02  本文已影响0人  喝酸奶舔下盖

weex学习最开始的时候应该多理解核心概念和运作方式,关键的组件要记牢,达到一出现这个组件就知道涵义,如果临时去翻阅文档才回到意思的话效率就太低了,基础很重要。
还有一些核心概念一定要了解清楚,包括以下几点:

一、数据绑定机制

1.单向绑定

单向数据绑定的实现思路:


<!DOCTYPE html>
<html>
<head></head>
<body>
    <div id="app">
        {{message}}
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: '单向绑定示例'
            }
        });
    </script>
</body>

2.双向绑定

数据的双向绑定是vue实现的一大功能。

使用v-model指令,实现视图和数据的双向绑定。

所谓双向绑定,指的是vue实例中的data与其渲染的DOM元素的内容保持一致,无论谁被改变,另一方会相应的更新为相同的数据。这是通过设置属性访问器实现的。

v-model主要用在表单的input输入框,完成视图和数据的双向绑定。

v-model只能用在<input><select><textarea>这些表单元素上。

双向绑定的缺点:不知道data什么时候变了,也不知道是谁变了,变化后也不会通知,当然可以watch来监听data的变化,但这复杂,还不如单向绑定。

<!DOCTYPE html>
<html>
<head></head>
<body>
    <div id="app">
        <input type="text" v-model="message">
        <p>{{message}}</p>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: ''
            }
        });
    </script>
</body>

二、组件通讯

组件通讯包括:父子组件间的通信和兄弟组件间的通信。在组件化系统构建中,组件间通信必不可少的。

1.父组件 --> 子组件

<template>
    <Child :child-msg="msg"></Child>
</template>

子组件关键代码如下

export default {
  name: 'child',
  props: {
    child-msg: String
  }
};

child-msg 为父组件给子组件设置的额外属性值,属性值需在子组件中设置props,子组件中可直接使用child-msg变量。

2.子组件--> 父组件

this.$emit('toparentevent', 'data');

父组件监听事件:

<Child :msg="msg" @toparentevent="todo()"></Child>

toparentevent 为子组件自定义发送事件名称,父组件中@toparentevent为监听事件,todo为父组件处理方法。

3. 父组件直接获取子组件属性或方法

给要调用的子组件起个名字。将名字设置为子组件 ref 属性的值。

<child-component ref="aName"></child-component>

父组件中通过 $refs.组件名 来获得子组件,也就可以调用子组件的属性和方法了。

var child = this.$refs.aName
child.属性
child.方法()

父组件通过 $children 可以获得所有直接子组件(父组件的子组件的子组件不是直接子组件)。

Bus中央通信

各组件可自己定义好组件内接收外部组件的消息事件即可,不用理会是哪个组件发过来;而对于发送事件的组件,亦不用理会这个事件到底怎么发送给我需要发送的组件。

先设置Bus

//bus.js 
import Vue from 'vue'
export default new Vue();

组件内监听事件

import bus from '@/bus';

export default {
  name: 'childa',
  methods: {
  },
  created() {
    bus.$on('childa-message', function(data) {
      console.log('I get it');
    });
  }
};

发送事件的组件

import bus from '@/bus';
//方法内执行下面动作
bus.$emit('childa-message', this.data);

三、生命周期

1.生命周期钩子函数

首先,每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期。首先看一张官方文档上的图片


Vue生命周期

可以看到在vue一整个的生命周期中会有很多钩子函数提供给我们在vue生命周期不同的时刻进行操作, 所有的钩子函数如下

生命周期钩子 组件状态 最佳实践
beforeCreate 实例初始化之后,this指向创建的实例,不能访问到data、 computed、watch、methods上的方法和数据 常用于初始化非响应式变量
created 实例创建完成,可访问data、computed、watch、methods上的方法和数据,未挂载到DOM,不能访问到el属性,ref属性内容为空数组 常用于简单的ajax请求,页面的初始化
beforeMount 在挂载开始之前被调用,beforeMount之前,会找到对应的template,并编译成render函数 -
mounted 实例挂载到DOM上,此时可以通过DOM API获取到DOM节点,$ref属性可以访问 常用于获取VNode信息和操作,ajax请求
beforeUpdate 响应式数据更新时调用,发生在虚拟DOM打补丁之前 适合在更新之前访问现有的DOM,比如手动移除已添加的事件监听器
updated 虚拟 DOM 重新渲染和打补丁之后调用,组件DOM已经更新,可执行依赖于DOM的操作 避免在这个钩子函数中操作数据,可能陷入死循环
beforeDestroy 实例销毁之前调用。这一步,实例仍然完全可用,this仍能获取到实例 常用于销毁定时器、解绑全局事件、销毁插件对象等操作
destroyed 实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁 -

注意: vue2.0之后主动调用$destroy()不会移除dom节点,作者不推荐直接destroy这种做法,如果实在需要这样用可以在这个生命周期钩子中手动移除dom节点

2.单个组件的生命周期

3.父子组件的生命周期

4.兄弟组件的生命周期

此外还有一些点需要我们在学习时注意:(变量的标识、方法调用、如何对应关系、模板指令、特殊属性、以及命名规则等)

vue基础题目:

1. v-show和v-if指令的共同点和不同点?
v-show指令是通过修改元素的displayCSS属性让其显示或者隐藏
v-if指令是直接销毁和重建DOM达到让元素显示和隐藏的效果

2.如何让CSS只在当前组件中起作用
将当前组件的<style>修改为<style scoped>

3.父、子组件间是如何通信的?
在Vue中,每个组件实例的作用域是孤立的。这也意味着不能(也不应该)在子组件的模板内直接饮用父组件的数据。父组件通过Props向子组件传递数据,而子组件通过Events向父组件传递数据

4.请列举出3个Vue中常用的生命周期钩子函数?
BeforeCreate、Created、BeforeMount、Mounted、BeforeUpdate、Update、beforeDestory、Destory.

5.Vue的双向数据绑定原理是什么?
Vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。

6.说出至少4种vue当中的指令和它的用法?
v-if:判断是否隐藏;v-for:数据循环出来;v-bind:class:绑定一个属性;v-model:实现双向绑定

7.delete和Vue.delete删除数组的区别?
delete只是被删除的元素变成了 empty/undefined 其他的元素的键值还是不变。 Vue.delete直接删除了数组 改变了数组的键值。


8.下列关于vue的组件说法不正确的是( BC )
A.不一定要写style
B.template视图里可以写多个div容器
C.父组件给子组件传值需定义props属性
D.子组件与父组件通信需定义$emit属性

9.下面关于vue的声明周期说法不正确的是( D )
A.总共分为8个阶段:创建前/后、载入前/后、更新前/后、销毁前/后、
B.updated和beforeUpdate分别是更新完成和更新前
C.创建后this才可以获取属性、mounted时$el节点才被渲染
D.created创建后$el就不是undefined了

10.下面关于js框架说法正确的是( ABCD )
A.Vue是一个MVVM框架
B.Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件
C.Vue中可以使用 v-for 指令来循环对象
D.在 input 输入框中我们可以使用 v-model 指令来实现双向数据绑定

参考:

1.vue官网教程

2.vue官网API

3.vue生命周期深入

上一篇下一篇

猜你喜欢

热点阅读