本文共 4490 字,大约阅读时间需要 14 分钟。
而 Vue部分实现了上述规范
Vue.component(组件名称, { data: 组件数据, template: 组件模板内容 }) // 注册一个名为 button-counter 的新组件 Vue.component('button-counter', { data: function () { return { count: 0 } }, template: '' })
组件名 可以多次调用
data必须是一个函数
组件模板内容必须是单个跟元素( 平级根元素只能有一个 )
只能这样 template: ``, 不能 这就不是单个根元素 template: ` `,
例如: Vue.component('HelloWorld', { template:`字符串模板中可以使用`})普通标签模板中 需要修改: 短横线方式 Vue.component('my-component', { /* ... */ }) 驼峰方式 Vue.component('MyComponent', { /* ... */ })
局部组件只能在注册他的父组件中使用 1. 先定义一个 var var ComponentA = { data: function(){ return { msg: 'HelloJerry' } }, template: '{ {msg}}' }; 2. 在实例里面调用(第一个是组件名称,第二个预先设置好的参数) new Vue({ el: '#app' components: { 'component-a': ComponentA, 'component-b': ComponentB, 'component-c': ComponentC, } })
可以自己百度
1. 组件内部通过props接收传递过来的值 ( props传递数据原则:单向数据流)
Vue.component(‘menu-item', { props: ['title'], template: '{ { title }}' })
2. 父组件通过属性将值传递给子组件
3. props属性名规则 (跟组件名 差不多 都需要在 html 中 转换短横线形式)
Vue.component(‘menu-item', { // 在 JavaScript 中是驼峰式的 props: [‘menuTitle'], template: '{ { menuTitle }}' })
4. props属性值类型
加 : 就是原始的数组 不加冒号会转变为字符串 比如 :pnum=‘12’ 是数字型 pnum=‘12’ 是字符串1. 子组件通过自定义事件向父组件传递信息 (不携带参数)
2. 父组件监听子组件的事件
3. 子组件通过自定义事件向父组件传递信息 (携带参数)
4. 父组件监听子组件的事件 (这个 $event 等于 0.1)
1. 单独的事件中心管理组件间的通信
var eventHub = new Vue() // 名字任意
2. 监听事件与销毁事件(监听事件 写在 mounted:function(){} 里面)
eventHub.$on('add-todo', (val)=>{ } ) eventHub.$off('add-todo')
3. 触发事件
eventHub.$emit(‘add-todo', val)
作用:父组件向子组件传递内容
1. 插槽位置 (slot)
Vue.component('alert-box', { !!!如果父组件没有内容, 则显示slot里面的内容, !!! 如果父组件有内容,则slot的内容则会被覆盖消失 template: `Error!` })默认内容
2. 插槽内容( slot 里显示 Something bad happened)
Something bad happened.
1. 插槽定义
Vue.component('base-layout', { template: `` }); var vm = new Vue({ el: '#app', data: { } });
2. 插槽内容
标题信息
主要内容1
主要内容2
底部信息信息
//需要填充多个标签, 就用 template 这个固定标签 标题信息1
标题信息2
主要内容1
主要内容2
底部信息信息1
底部信息信息2
应用场景:父组件对子组件的内容进行加工处理
Vue.component('fruit-list', { props: ['list'], 1. 给 slot 设置 v-bind:info(任意名字) = '' template: `2. 给 templat 设置 slot-scope='slotProps' 3. 里面的 属性设置 slotProps.info.id==3 { { slotProps.info.name}} { { slotProps.info.name}} ` }); var vm = new Vue({ el: '#app', data: { list: [{ id: 1, name: 'apple' },{ id: 2, name: 'orange' },{ id: 3, name: 'banana' }] } });{ {item.name}}
案例:需求分析
1. 按照组件化方式实现业务需求
根据业务功能进行组件化划分
2. 功能实现步骤
实现整体布局和样式效果
划分独立的功能组件 组合所有的子组件形成整体结构 逐个实现各个组件功能 标题组件 列表组件 结算组件转载地址:http://dgzsz.baihongyu.com/