VUE基础 (4)

视图改变是有数据改变的。是有后端数据驱动前段视图的变化。

十五、Props父组件向子组件传值 单组件由三部分组成: <template> <div> </div> </template> <script> export default { name: 'mc', data() { return { } } } </script> <style scoped> </style>

template: 里面只能存在一个根元素

script:必须通过export default导出,外部组件才能访问。

name:指定组件名字。

data:绑定数据。

style:样式

scoped:当前样式只在当前组件内生效,局部的。

子父级组件

一个组件被另一个组件嵌套。

如: app组件里面嵌套hellowolrd组件。

子父级组件通信

父 --> 子: props

子 --> 父: emit Event

父向子通信:

父组件: <son :title="msg"></son> msg: 'son hello' 子组件: props: [ "title" ] {{title}} props数据传递类型验证 子组件接受参数时,指定类型。 props: { title: { type: [String,Number], required: true, defalut: 100 } }

type:指定接收参数类型,可以有多个类型。

required:是否必传。

注意:如果是Number、String可以直接默认一个值,如果是其他类型则默认返回一个方法。

<son :msg="say"></son> return { say: { name:"Zhangsan", age:20 } } props: { msg: { type:Object, default:function(){ return { name:"lisi", age:10 } } } }

数据验证

多数据类型验证

必选项验证

默认值

obj、arr数据类型的默认值

十六、子向父组件通信

使用v-on自定义事件

子组件代码: <template> <div> <button @click="send">发送</button> </div> </template> <script> export default { name: 'OneSon', data() { return { msg: '父组件,您好。' } }, methods: { send() { this.$emit("msg",this.msg); } } } </script> <style> </style> 父组件代码: <template> <div> <one-son @msg="getData"></one-son> <H1>{{msg}}</H1> </div> </template> <script> import OneSon from '../components/OneSon' export default { name: 'One', components:{ OneSon }, data() { return { msg: '' } }, methods: { getData(data) { this.msg = data; } } } </script> <style> </style> 父组件向子组件传递数据步骤

子组件通过一个事件来触发。

事件中有两个参数,一个key,用来在父组件中作为事件。另一个数据。

父组件使用key作为事件,定义一个事件接受数据

数据交互式同步的。

input所有内容为String,可以通过下面进行转换成数字。 <one-son @msg="getData" :sendMsg="getNum"></one-son> computed: { getNum(){ return this.newMsg -0; } } 十七、插槽与缓存 使用插槽分发内容

单个插槽

父组件: <template> <div> <two-son> <span>{{msg}}</span> </two-son> </div> </template> <script> import TwoSon from '../components/TwoSon' export default { name: 'Two', components: { TwoSon }, data() { return { msg: '使用插槽' } } } </script> <style scoped> span{ color: red; font-size: 40px; } </style> 子组件: <template> <div> <slot>我是插槽,但是我会被父组件插入内容覆盖。</slot> </div> </template> <script> export default { name: 'TwoSon', data() { return { } } } </script> <style> </style>

注意:插槽的样式,可以在父组件中设置,也可以在子组件中设置。

具名插槽

<two-son> <span slot="s1">{{msg}}</span> <p slot="s2">我是插槽2哦</p> </two-son> <div> <slot>我是插槽,但是我会被父组件插入内容覆盖。</slot> <hr> <slot></slot> </div>

注意:当没有传递视图时,可以显示查查默认设置的值。

作用域插槽(传递参数)

作用于插槽传递数据

子组件: <slot text="google hjhlj"></slot> 父组件: <span slot="s2" slot-scope="key"> {{ key.text}} </span> props与slot插槽对比 名称 props slot
传递数据   父组件 ---> 子组件   子组件---> 父组件  
数据   由父组件决定   由子组件决定  
视图   由子组件决定   由父组件决定  
十八、动态组件 <template> <div> <component v-bind:is="currentView"></component> <button @click="change">change</button> </div> </template> <script> import Events from './components/Events' import FormData from './components/FormData' import Styles from './components/Style' import MyCompent from './components/myCompent' import Father from './components/Father' import One from './components/One' import Two from './components/Two' export default { name: 'App', data() { return { currentView: "FormData" } }, methods: { change() { this.currentView = 'MyCompent'; } }, components: { Events, FormData, Styles, MyCompent, Father, One, Two } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsxpg.html