vue数据绑定方式详解
众所周知,vue是单向数据流,子组件不能直接改变父组件中的变量,如下:
parent.vue
<template> <p> <p>parent:{{ msg }}</p> <children :msg="msg"></children> </p> </template> <script> import children from '@/components/children' export default { name: 'parent', data() { return { msg: 'from parent' } }, components: { children } } </script>
children.vue
<template> <p> <p>children:{{ msg }}</p> <p> <button @click='changeChild'>点击改变children的msg</button> </p> </p> </template> <script> export default { name: 'children', data () { return { } }, props: ['msg'], methods: { changeChild() { this.msg = 'from children' } } } </script>
页面如下:
点击后:
上面是最基础的父向子组件传递数据,子组件修改变量不影响父组件,那么父子组件如果要同步呢?这时应该使用this.$emit()这个函数了。
第一种:v-model传递
父组件修改:
<template> <p> <p>parent:{{ msg }}</p> <children v-model="msg"></children> </p> </template>
子组件修改:
<script> export default { name: 'children', data () { return { } }, model: { prop: "msg" }, props: ['msg'], methods: { changeChild() { this.$emit('input', "child") } } } </script>
注意:model部分不能省略,this.$emit()触发的事件为input(当父组件上没有明确绑定返回事件时,input为默认),传递的值为child
页面如下:
点击后:
可见父子组件的值同步了
第二种:明确指定响应事件(@)
父组件修改:
<template> <p> <p>parent:{{ msg }}</p> <children @upChange="changeMsg" :msg="msg"></children> </p> </template> <script> import children from '@/components/children' export default { name: 'parent', data() { return { msg: 'from parent' } }, components: { children }, methods: { changeMsg() { this.msg = "收到子组件信号,嘤嘤嘤" } } } </script>
子组件修改:
<script> export default { name: 'children', data () { return { } }, model: { prop: "msg" }, props: ['msg'], methods: { changeChild() { this.$emit('upChange', "给你一个value") this.msg = 'from children' } } } </script>
这里我故意在emit之后修改了msg的值,事实证明,这是不行的,所以我猜测emit是一个异步函数,会在队列的最后执行,也就是说这里赋值‘from children’最后被覆盖了。
值得一提的是,this.$emit()第二个参数可向父组件传值,这里用处很大,自行体会
页面如下:
点击后:
两种方法都基本可以达到预期效果,具体自己分情况使用
说完父子通信后,理所当然到子子组件通信了,其实,机智的你应该也想到怎么做了吧。没错,就是利用父组件当跳板,让子子组件达到通信的效果。
下面还是给个小例子:
父组件:
<template> <p> <children @upChange="changeMsg" :msg="msg"></children> <children2 :msg2="msg2"></children2> </p> </template> <script> import children from '@/components/children' import children2 from '@/components/children2' export default { name: 'parent', data() { return { msg: 'from parent', msg2: 'from parent' } }, components: { children, children2 }, methods: { changeMsg(value) { this.msg = value this.changeChild2() }, changeChild2() { this.msg2 = "children2收到 children2收到 over over!" } } } </script>
子组件一:
<template> <p> <p>children:{{ msg }}</p> <p> <button @click='changeChild'>点击呼叫children2</button> </p> </p> </template> <script> export default { name: 'children', data () { return { } }, model: { prop: "msg" }, props: ['msg'], methods: { changeChild() { this.$emit('upChange', "children2,children2,收到请回答,收到请回答") } } } </script>
子组件二:
<template> <p> <p>children2: {{ msg2 }}</p> </p> </template> <script> export default { name: 'children2', data () { return { } }, props: ['msg2'] } </script>
页面如下: 点击后:
本文介绍了vue数据绑定方式详解 ,更多相关内容请关注php中文网。
相关推荐:
以上是vue数据绑定方式详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在 Vue.js 中使用 Bootstrap 分为五个步骤:安装 Bootstrap。在 main.js 中导入 Bootstrap。直接在模板中使用 Bootstrap 组件。可选:自定义样式。可选:使用插件。

可以通过以下步骤为 Vue 按钮添加函数:将 HTML 模板中的按钮绑定到一个方法。在 Vue 实例中定义该方法并编写函数逻辑。

Vue.js 中的 watch 选项允许开发者监听特定数据的变化。当数据发生变化时,watch 会触发一个回调函数,用于执行更新视图或其他任务。其配置选项包括 immediate,用于指定是否立即执行回调,以及 deep,用于指定是否递归监听对象或数组的更改。

Vue 多页面开发是一种使用 Vue.js 框架构建应用程序的方法,其中应用程序被划分为独立的页面:代码维护性:将应用程序拆分为多个页面可以使代码更易于管理和维护。模块化:每个页面都可以作为独立的模块,便于重用和替换。路由简单:页面之间的导航可以通过简单的路由配置来管理。SEO 优化:每个页面都有自己的 URL,这有助于搜索引擎优化。

Vue.js 返回上一页有四种方法:$router.go(-1)$router.back()使用 <router-link to="/"> 组件window.history.back(),方法选择取决于场景。

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVueDirectly.1)TeamExperience:selectBasedAsedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects,vueforsimplerprojects,reactforforforecomplexones.3)cocatizationNeedsneeds:reactofficatizationneedneeds:reactofferizationneedneedneedneeds:reactoffersizatization needeffersefersmoreflexiblesimore.4)ecosyaka

Vue.js 遍历数组和对象有三种常见方法:v-for 指令用于遍历每个元素并渲染模板;v-bind 指令可与 v-for 一起使用,为每个元素动态设置属性值;.map 方法可将数组元素转换为新数组。

在 Vue.js 中引用 JS 文件的方法有三种:直接使用 <script> 标签指定路径;利用 mounted() 生命周期钩子动态导入;通过 Vuex 状态管理库进行导入。
