Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

最近有很多小伙伴咨询关于vue创建组件的问题,小编结合多年的经验整理出来一些vue创建组件的三种方式对应的资料,分享给大家。

有时Vue的反应性系统还不够,您只需要重新渲染组件即可。

重新渲染组件有以下几个办法:

1.可怕的方法:重新加载整个页面

2.可怕的方法:使用v-if

3.更好的方法:使用Vue的内置forceUpdate方法

4.最好的方法:在组件上进行key更改

非常不建议这样做,我们来看下一个办法。

v-if指令,该指令仅在组件为true时才渲染。 如果为false,则该组件在DOM中不存在。

下面我们设置它以使其v-if能够正常工作的方式。

在您的template,您将添加v-if指令:

script您将添加使用以下方法nextTick:

这里发生的事情:

1.最初 renderComponent 设置为 true ,因此 my-component 组件渲染

2.在 forceRerender 中我们立即设置 renderComponent 为 false

3.停止渲染组件 my-component ,因为该 v-if 指令现在的值为 false

4.在 nextTick 中将 renderComponent 上设置回 true

5.现在该 v-if 结果为 true ,因此我们 my-component 再次开始渲染

我们必须等到 nextTick ,否则我们不会看到任何变化。

在Vue中,一个 nextTick 是一个DOM更新周期。Vue将收集在同一 nextTick 中进行的所有更新,在 nextTick 结束时,它将根据这些更新来渲染 DOM 中的内容。如果我们不等到 nextTick ,我们对 renderComponent 的更新就会自动取消,什么也不会改变。

其次,当我们第二次渲染时,Vue将创建一个全新的组件。 Vue 将销毁第一个,并创建一个新的,这意味着我们的新 my-component 将像正常情况一样经历其所有生命周期- created , mounted 等。

这是解决此问题的两种最佳方法之一,此方法得到Vue的官方支持。

forceUpdate 在组件实例本身以及全局实例上,可以通过两种不同的方式调用:

重要提示 :这不会更新您拥有的任何计算属性。调用 forceUpdate 只会 强制重新渲染视图

在许多情况下,我们需要重新渲染组件。

要正确地做到这一点,我们将提供一个key属性,以便 Vue 知道特定的组件与特定的数据片段相关联。如果key保持不变,则不会更改组件,但是如果key发生更改,Vue 就会知道应该删除旧组件并创建新组件。

我们可以采用这种将key分配给子组件的策略,但是每次想重新渲染组件时,只需更新该key即可。

每次 forceRerender 被调用时,我们的 componentKey 都会改变。当这种情况发生时,Vue将知道它必须销毁组件并创建一个新组件。我们得到的是一个子组件,它将重新初始化自身并“重置”其状态。

原文:

????html标签中使用的组件在使用插槽后互相之间可以嵌套,被嵌套的称为嵌套的子组件,嵌套的叫父组件,所有的组件都有一个根组件即vue实例管理的容器。

? ? 使用 $parent 获取父组件的实例。

可以在控制台看到父组件的vue实例

? ? 当组件嵌套比较深,而又需要最外层组件的数据时,可以通过 $parent.$parent…… $parent 一层一层父类往上至根目录,

或者使用? $root 直接获取根组件

? ??使用 $children 获取所有子组件实例。

可在控制台看见根据组件在页面中的顺序返回的所有子组件组成的数组

要使用子组件的值时可使用此方法,用下标选择需要的子组件。

因为使用 $children 获取的数组里顺序是按是在页面中使用的顺序来排序的,当有的业务不确定使用顺序,并且还要使用子组件的值的时候,就需要按 ref 标识来获取子组件。

在使用子自定义组件时,给组件标签添加一个 ref 属性,然后就可以通过 $refs 返回拥有ref属性的组件:

在控制台可以看见获取到的子组件数组:

? ? 因为返回的是对象,所以可以通过ref值来操作子组件的值。

可以用以下几种方式:

Vue.component(‘component-a’,{

????????template:’divcomponent-a?content/div’

????});

或是单文件组件

template

????div?class=”c2fb-5579-e371-c2d7 app-container”

????????

????/div

/template

script

????

/script

style

????

/style

在初学 Vue 的时候,都是利用 cdn 的方式在一个页面中导入 vue.js 的库文件.

接着,肯定就学到了组件开发.

当然,也是在单页面中.

API文档告诉我们

在后来,学到了使用 vue-cli 搭配 .vue 模板的方式开发组件.

好了,三种组件创建的方式说完了,且在各自的环境里都能够正常的运作.

在 Vue 开发中,所有的组件本质上都是由一个继承自 Vue 的构造函数创建的.

比如在注册局部组件时.

从视觉上,我们看到 TodoListComp 只是一个普通的 Object 对象.

直接赋值给了其他组件的 components 属性里.

然后,这个组件就成为了一个局部组件,并可以在注册了当前组件的内部去使用了.

那它在内部做了什么,导致这个普通的对象最后可以被当成是一个正常的组件来使用呢?

比如,普通对象上都没有 $el 之类的属性.丢给 components 之后,就啥都有了.

使用Vue.extend(options)会根据传入的options创建一个VueComponent的组件构造函数并返回.

既然使用 Vue.extend 会返回一个组件的构造函数.

那么我们就可以使用 new 这个返回的构造函数

并手动的 mount 并替换某个 dom 节点(就和 new App() 一样)

前面,我么已经知道了,所有的 vue 组件,不管是全局的还是局部的.

都是利用 Vue.extend 方法构建并返回出一个继承自 Vue 的组件构造函数.

这个函数接受一个满足了 Vue 组件属性项的普通的 Object 对象.

在.vue模板文件开发中,也不例外.

我们可以看看,在书写 .vue 模板文件时,我们到底在写什么?

我们写的是一个 .vue 文件.

并按照 template/template script/script ( 这里不关注 style/style 节点 ) 的格式编写 .vue 文件.

把它整合起来来看.

等价于

好了,继续回到 .vue 模板开发文件中.

在另外一个组件中,使用此组件时,我们会 import xxx from xxx.vue 并搭配 components:{ xxxx }

.vue 会被 webpack 中配置的 vue-loader 处理.这是我们已知的.

结合上述的判断, vue-loader 仅仅只是把 .vue 文件编译成了一个 vue.extend(options) 创建组件所需要的 options 普通对象而已.

既然 vue-loader 仅仅,只是把 .vue 模板文件编译成了一个 options 普通对象.

那么我们可以手动的使用 Vue.extends(options) 来获得这个组件对象的构造函数.

拿到此组件的构造函数,我们就可以在 组件 mounted 的时候,通过 new 的方式,挂在到 html 上了. (而无需去注册到 components,成为一个局部组件.直接把它当成一个自己熟悉的不能在熟悉的构造函数调用即可.)

既然我们已经知道:

我们完全可以直接使用 .js 文件的方式来创建 vue 组件,进而省略 .vue vue-loader 这个执行的步骤.

此 .js 文件到处一个 vue 组件的构造函数.

在另外一个组件里

通过这样的原理,我们完全可以在HTML页面的任意地方,任意位置,任意的挂在我们自己的组件.并不一定必须使用.vue声明式组件的语法.

[ 码云地址 ]

使用vue.js构造modal组件的方法是使用 v-model 指令:

v-model 指令在表单控件元素上创建双向数据绑定。根据控件类型它自动选取正确的方法更新元素。

比如,多个勾选框,绑定到同一个数组:

input type=”checkbox” id=”jack” value=”Jack” v-model=”checkedNames”

label for=”jack”Jack/label

input type=”checkbox” id=”john” value=”John” v-model=”checkedNames”

label for=”john”John/label

input type=”checkbox” id=”mike” value=”Mike” v-model=”checkedNames”

label for=”mike”Mike/label

br

spanChecked names: {{ checkedNames | json }}/span

new Vue({

el: ‘…’,

data: {

checkedNames: []

}

})

以上就是小编对vue创建组件和vue创建组件的三种方式的总结,更多vue创建组件的三种方式方面的知识可以关注我们,在网站首页进行搜索你想知道的!