vue高级开发

76 阅读5分钟

vscode

vscode的调试,按f5就会出现用什么样的方式进行调试。

进行一个选择

扩展软件:debugger chrome

使用:需要一个服务器的插件。http-server .

f5的时候,需要修改地址。地址是在服务器下边才可以的。

调试页面

vscode使用chrome调试普通的html页面的方法如下:

1,扩展软件的安装:debugger of chrome

2,当前项目下安装http-server

3,在http-server 安装后,在node_modules/http-server/bin,在vscode终端,运行http-server path(指的是把某个目录当成服务器目录),会有一个8080端口的服务器,运行后也是可以访问的。

4,f5 进行调试,选择chrome 的方式。选择html页面,在html页面引入的js文件,会自动跳转到被打断点的js文件里边。

注意:

如果没有安装debugger chrome 则会跳出如下的提示,是否需要安装调试的工具。其中就有chrome的提示。

vscode中管理git

vscode克隆github内容到本地

远程连接的地址是,点击克隆的时候会让我输入一个git的地址。

下异步操作:

克隆成功后,右下角会有提示,是否选择新窗口打开还是当前的窗口。

成功后的截图如下:

内容有变化的时候:

提交内容:

点勾,表示是否需要提交,选择时,输入提交内容,回车就提交了。

提交只是保存到本地仓库而已。这时选择推送,就是保存到了github上。

vscode需要设置Email和name

这个是设置email的方法。

vue扩展插件:

render函数

render()函数是把渲template的模板进行相关的处理后渲染成虚拟dom。

计算属性和监听器

computed 计算属性 与方法的区别:计算属性只要当值发生变化的时候才会重新渲染。计算属性是有缓存的效果的。也就是说,在值发生改变的时候它的值是缓存起来的。

监听器:watch

监听器默认情况下是不会立即执行的,初始化的时候是不会立即执行的。需要设置一个数才会立即执行。

这个监听器的设置是初始化时也会执行,执行的代码是如下。注意:handler是固定写法,并不是被监听的属性。

如下代码:

Vue组件

vue边界组件通信

经常用的组件通信是props vuex等。

但是还有一些边界的组件的通信。

$parent 的通信方式:

就两步:

第一步是在触发组件中定义,如下图:

第二步是,接收组件中监听:

$children的组件通信

在父组件中获取所有的子组件,然后调用子组件中方法,其实是直接执行子组件中的方法。

父类中写这个方法:

在子类中定义:

在子类1中的方法是:

在子类2中的方法是:

结果是:

注意:this.$children的时候是不能够保证子元素的顺序,所以最好是相同的方法,只是不同的执行结果而已。我上述的方法就是不同的,所以是很不好的。

个人总结:我认为是在components中的组件才被成为是子类,才会被放入到children里边。

attrsattrs 和 listeners

如果父组件给子组件传递属性时,子组件并没有设置props,那么可以通过$attrs进行获取这些父组件传递过来的属性。

如下图:

子组件:

输出的结果:

子组件调用父组件的函数

父类给子类传递的方法,传递的方式@click,但是事实子类无法接收。只能在子类中触发这个方法。

这个方法是写在父类的方法对象里边的,如下:

子类中触发,父类传递过来的方法是:

圈起来的那部分是一个固定的写法。

这个是展开父类给子类传递的所有的方法,并且进行执行。

provid / inject(提供和注入)

如下截图:

父类组件中的声明

子类组件中的使用:

作用域卡槽

就是子类组件在父类中使用时,使用子类传输过来的数据。

如下代码和解析:

作用域卡槽的定义:

作用域卡槽的使用:

卡槽作用域的进一步理解

其实我们在子类中定义传输数据的时候,会有一个上下文来接收这些所有的数据,然后把所有的数据解构给相对应的变量。上边是解构的代码。

这个是不解构的代码:

卡槽传递两个属性,其实可以更多的。以两个为例。

父类的该组件接收:

我们不用{}解构的方法。会是直接获取上下文。输出上下文会看到所有的数据:

组件实现KInput

组件的标准是:高内聚 低耦合

组件功能单一或者是纯粹

思路:

1,(最里边)纯数据绑定

2,(中间)label和错误信息的显示

3,(最外边)数据的传递和校验规则的传递

嵌套使用的是卡槽slot的规则。

最深层使用最外边的数据是使用的provide 和 inject的方式实现的。

XMInput组件实现

这个组件只是做纯数据的绑定。

v-model具体内容

上述代码是组件中v-model被分解后的结构。

组件里面只要提交input事件,就可以改变外边的value值,外边的value值改变后又传递给了组件里边的value,所以形成了一个循环。

如下代码:

传递过来的属性定义是:

第二种情况:

我们单独使用input组件,使用v-model值 同样是双向绑定的,为什么呢?

其实还是可以用这个代码来解释,因为input框变化时,就会触发@input事件。从而改变value值。

XMFormItem 组件的实现

XMInput组件是他的子组件。

传递属性的展开:

v-bind="$attr"

需要注意的地方是inheriAttrs的设置。

默认是true。我们在子组件中设置过属性,则根组件的$Attrs会有子组件的属性。如果子组件中设置inheriAttrs为false。则根组件就不会有。

例如,有些属性我并没有props进行接收,可以用v-bind="$attr" 进行展开。