vue组件传值和路由——day04

vue组件传值和路由——day04

1、组件传值

1.父组件向子组件传值
<script>
var vm = new Vue({
el: '#app',
data: {
msg: '父组件'
},
components: {
son: {
template: '<h1>子组件 --- {{finfo}}</h1>',
props: ['finfo'] // 把父组件传递过来的 finfo 属性,先在 props 数组中,定义一下,这 样,才能使用这个数据
}
}
});
</script>

注意:先使用props定义一下才能使用,props 中的数据,都是只读的,无法重新赋值 2. 使用v-bind或简化指令,将数据传递到子组件中:

<div id="app">
<son :finfo="msg"></son>
</div>
2.子组件向父组件传值

原理:父组件将方法的引用,传递到子组件内部,子组件在内部调用父组件传递过来的方法,同时把要发送给父组件的数据,在调用方法的时候当作参数传递进去;

<son @func="getMsg"></son>

子组件内部通过this.$emit('方法名', 要传递的数据)方式,来调用父组件中的方法,同时把数据传递给父组件使用

<div id="app">
<!-- 引用父组件 -->
<son @func="getMsg"></son>

<!-- 组件模板定义 -->
<script type="x-template" id="son">
<div>
<input type="button" value="向父组件传值" @click="sendMsg" />
</div>
</script>
</div>

<script>
// 子组件的定义方式
Vue.component('son', {
template: '#son', // 组件模板Id
methods: {
sendMsg() { // 按钮的点击事件
this.$emit('func', 'OK'); // 调用父组件传递过来的方法,同时把数据传递出去
}
}
});

var vm = new Vue({
el: '#app',
data: {},
methods: {
getMsg(val){ // 子组件中,通过 this.$emit() 实际调用的方法,在此进行定义
alert(val);
}
}
});
</script>

2、路由

**后端路由:**对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;

**前端路由:**对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;

在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);

1.路由基本使用

1.1先引入vue-router组件库,注意vue包先引入,vue-router是依赖于vue的。

<script src="./lib/vue-2.4.0.js"></script>

<script src="./lib/vue-router-3.0.1.js"></script>  

1.2创建vm实例

 var vm = new Vue({
el:'#app',
data:{},
methods:{},
router:routerObj
})

vm实例中,使用 router 属性来使用路由规则

1.3创建路由对象

var routerObj = new VueRouter({
routes:[
{path:'/',redirect:'/login'},
{path:'/login',component:login},
{path:'/register',component:register}
]
})

路由对象中参数解释:

routes[]——路由匹配规则

path——表示监听 哪个路由链接地址

component——如果 路由是前面匹配到的 path ,则展示 component 属性对应的那个组件

注意: component 的属性值,必须是一个 组件的模板对象, 不能是 组件的引用名称

redirect——重定向

1.4定义两个路由组件

var login = {
template:'<h1>登录组件</h1>'
}
var register={
template:'<h1>注册组件</h1>'
}

1.5使用router-view来显示匹配到的组件

<div id="app">
<a href="#/login">登录</a>
<a href="#/register">注册</a>

<router-link to="/login"></router-link>
<router-link to="/register"></router-link>

<!-- router-view相当于占位符 -->
<router-view></router-view>
</div>
2.路由的嵌套

使用children实现路由的嵌套

 //创建一个路由对象
//在new路由对象的时候可以为构造函数,传递一个配置对象
var router= new VueRouter({
routes:[ //路由匹配规则
{
path:'/com',
component:com,
children:[
{path:'login',component:login},
{path:'register',component:register}
]

},
]
})

使用 children 属性,实现子路由,同时,子路由的 path 前面,不要带 / ,否则永远以根路径开始请求,这样不方便我们用户去理解URL地址

<div id="app">
<router-link to="/account">Account</router-link>
<router-view></router-view>
</div>

<template id="com">
<div>
<h1>这是一个account组件</h1>
<router-link to="/com/login">登录</router-link>
<router-link to="/com/register">注册</router-link>

<router-view></router-view>
</div>
</template>

上一篇:day04【 Idea、方法】


下一篇:Python——模块简介