Preface
Components are one of the most powerful features of vue.js, and the scopes of component instances are independent of each other, which means that data between different components cannot reference each other. How to transfer data has also become one of the important knowledge points of components.
Component
There are different relationships between components. The relationship between father and son and brother (those who are not father and son are temporarily called brothers).
Original author: Lin Xin, author's blog:
Parent-child component
The parent-child relationship is that component A uses component B in its template, then component A is the parent. Component, component B is the sub-component.
// 注册一个子组件Vue.component('child', {data: function(){text: '我是father的子组件!'}template: '<span>{{ text }}</span>'})// 注册一个父组件Vue.component('father', {template: '<div><child></child></div>' // 在模板中使用了child组件})
When using the father component directly:
<div id="app"><father></father></div>
The page will render: I am the child component of father!
The father component uses the child component in the template, so it is the parent component, and the child component is used, so the child component is the child component.
Sibling components
If two components do not reference each other, they are sibling components.
Vue.component('brother1', {template: '<div>我是大哥</div>'})Vue.component('brother2', {template: '<div>我是小弟</div>'})
When using the component:
<div id="app"><brother1></brother1><brother2></brother2></div>
The page will render:
I am the big brother
I am a younger brother
Prop
If a child component wants to use the data of the parent component, we need to obtain the data passed by the parent component through the props option of the child component. Below I use the format in the .vue file to write the example.
How to pass data
Reference the child component child.vue in the parent component father.vue, and pass the value of name to the child component.
<template><div class="app">// message 定义在子组件的 props 中<child :message="name"></child></div></template><script>import child from './child.vue';export default {components: {child},data() {return {name: 'linxin'}}}</script>
Declare the data it expects to obtain in the props option in the child component child.vue
<template><span>Hello {{message}}</span></template><script>export default {// 在 props 中声明获取父组件的数据通过 message 传过来props: ['message']}</script>
Then the page will be rendered :Hello linxin
One-way data flow
When the name of the parent component changes, the child component will automatically update the view. But in child components, we don't want to modify props. If you must modify these data, you can use the following method:
Method 1: Assign prop to a local variable, and then modify the local variable if you need to modify it, without affecting prop
export default {data(){newMessage: null },props: ['message'],created(){this.newMessage = this.message;}}
Method 2: Process prop in calculated properties
export default {props: ['message'],computed{newMessage(){return this.newMessage + ' 哈哈哈';}}}
Custom events
prop is one-way bound: When the properties of the parent component change, they will be propagated to the child component, but not the other way around. Modifying the prop value of a child component will not be passed back to the parent component to update the view. So how do child components communicate with parent components?
That is a custom event. By listening to the custom event in the parent component $on(eventName), when $emit(eventName) in the child component triggers the custom event, the parent component performs the corresponding operation.
For example, if you control the display of a pop-up subcomponent in the parent component, after pressing Close in the sub-component, tell the parent component to hide it, and then the parent component will perform the operation to hide the pop-up box.
<template><div class="app">// hide 为自定义事件,名字可以自己随便起,不能有大写字母,可以使用短横线 // @hide 监听子组件触发 hide 事件,则会执行 hideDialog 方法<dialog :is-show="show" @hide="hideDialog"></dialog><button @click="showDialog">显示弹框</button></div></template><script>import dialog from './dialog.vue';export default {components: { dialog },data() {return {show: false}},methods: {showDialog() {this.show = true;},hideDialog() {this.show = false;}}}</script>
In the child component dialog.vue:
<template><div class="dialog" v-show="isShow"><p>这里是弹框子组件</p><button @click="toHide">关闭弹框</button></div></template><script>export default {// 驼峰式命名的 prop 需要转换为相对应的短横线隔开式 is-showprops: ['isShow'],methods: {toHide(){// $emit 方法触发父组件的监听事件this.$emit('hide');}}}</script>
This achieves mutual communication between parent and child components.
Vuex
The above examples are all based on components of the parent-child relationship, but for other levels of relationships, it is more cumbersome to implement. Then Vuex can better help you communicate in real time between various components. Regarding Vuex, you can check out my other article: Vuex modularizes the status management of to-do items
Summary
It is not necessary to use Vuex for component communication. For some simple Data transfer, prop can also be completed. This article mainly records some basic knowledge points about component parameter passing. For actual practice, you can refer to notepad as an example. Use prop to display and hide sub-components, and use vuex to implement data state management between components.
The above is the detailed content of How to pass data between vue.js components. For more information, please follow other related articles on the PHP Chinese website!

JavaScript runs in browsers and Node.js environments and relies on the JavaScript engine to parse and execute code. 1) Generate abstract syntax tree (AST) in the parsing stage; 2) convert AST into bytecode or machine code in the compilation stage; 3) execute the compiled code in the execution stage.

The future trends of Python and JavaScript include: 1. Python will consolidate its position in the fields of scientific computing and AI, 2. JavaScript will promote the development of web technology, 3. Cross-platform development will become a hot topic, and 4. Performance optimization will be the focus. Both will continue to expand application scenarios in their respective fields and make more breakthroughs in performance.

Both Python and JavaScript's choices in development environments are important. 1) Python's development environment includes PyCharm, JupyterNotebook and Anaconda, which are suitable for data science and rapid prototyping. 2) The development environment of JavaScript includes Node.js, VSCode and Webpack, which are suitable for front-end and back-end development. Choosing the right tools according to project needs can improve development efficiency and project success rate.

Yes, the engine core of JavaScript is written in C. 1) The C language provides efficient performance and underlying control, which is suitable for the development of JavaScript engine. 2) Taking the V8 engine as an example, its core is written in C, combining the efficiency and object-oriented characteristics of C. 3) The working principle of the JavaScript engine includes parsing, compiling and execution, and the C language plays a key role in these processes.

JavaScript is at the heart of modern websites because it enhances the interactivity and dynamicity of web pages. 1) It allows to change content without refreshing the page, 2) manipulate web pages through DOMAPI, 3) support complex interactive effects such as animation and drag-and-drop, 4) optimize performance and best practices to improve user experience.

C and JavaScript achieve interoperability through WebAssembly. 1) C code is compiled into WebAssembly module and introduced into JavaScript environment to enhance computing power. 2) In game development, C handles physics engines and graphics rendering, and JavaScript is responsible for game logic and user interface.

JavaScript is widely used in websites, mobile applications, desktop applications and server-side programming. 1) In website development, JavaScript operates DOM together with HTML and CSS to achieve dynamic effects and supports frameworks such as jQuery and React. 2) Through ReactNative and Ionic, JavaScript is used to develop cross-platform mobile applications. 3) The Electron framework enables JavaScript to build desktop applications. 4) Node.js allows JavaScript to run on the server side and supports high concurrent requests.

Python is more suitable for data science and automation, while JavaScript is more suitable for front-end and full-stack development. 1. Python performs well in data science and machine learning, using libraries such as NumPy and Pandas for data processing and modeling. 2. Python is concise and efficient in automation and scripting. 3. JavaScript is indispensable in front-end development and is used to build dynamic web pages and single-page applications. 4. JavaScript plays a role in back-end development through Node.js and supports full-stack development.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

WebStorm Mac version
Useful JavaScript development tools

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SublimeText3 Chinese version
Chinese version, very easy to use

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool
