Vue组价通信
1.什么是路由?
单页面应用程序开发
无跳转,所有的交互都需要在一个页面完成
2.组件通信
一,父传子组件通信 (pass props / props down)
调用组件的方式就是写组件名称标签
传递数据:
将渲染的列表数据放到根组件App.js中,然后通过通信让子组件获取数据
我们可以在父组件中通过组件标签属性来传递数据
a.在使用组件标签上添加自定义属性
<todo-main foo = 'bar'></todo-main>
b.在子组件中通过props选项声明接收该数据 ,相当于声明函数形参
props: [ ' foo ' ]
c.然后我们就可以在子组件中像使用data属性成员一样来使用props中的数据 <label>{{ foo }}</label>
d.使用v-bind来传递动态数据
二,子传父组件通信 (Emit event / events up )
在子组件中绑定函数,获取数据,传递给父组件,再由父亲自己去决定如何使用这个数据
a.发布一个自定义事件 $.emit('tianjia',value)
b.在使用组件标签上通过v-on的方式来监听组件内部发布的自定义事件
c.在父组件调用子组件标签上绑定事件处理函数
d.在父组件中添加一个方法,形参就是接收的事件处理函数的value,用子组件的处理函数绑定父组件的方法,就可以将父子组件联系在一起
清空文本框,子组件自己处理,直接将value=‘’ ‘’
3.props
prop是单向绑定的,当父组件的属性数据变化时,将传递给子组件,但是反之不会,即子组件不能去修改prop数据,引用类型除外
无论是普通数据还是引用数据都不能重新赋值,都只是修改
修改:this.user.name = 'hahha';
重新赋值:this.user = { };
因为JavaScript中对象和数组是引用数据类型,指向同一个内存空间,如果prop是一个对象或者数组,在子组件内部改变会影响父组件的状态
props验证:
props: { //推荐这样来定义props,更严谨
todos: {
type:Array,
//require:true //必须给,此时require和default互斥,只选一个就可以
default: function(){
return [ ]; //props默认值,如果没有传值,就是空数组
}
}
}