vue 组件
# vue 组件
# 一,组件化与模块化的区别
- 模块化:从代码逻辑的角度进行划分;方便代码分层开发,保证每个功能模块的职能单一;
- 组件化:从UI界面的角度进行划分;前端的组件化方便了UI组件重用;
# 二,定义组件(三种)
- code:./8.component.html
# 1.使用Vue.extend配合Vue.component方法:
<div id="app">
<login></login>
</div>
<script>
var login=Vue.extend({
template:"<h1>登录</h1>" //组件的html结构
});
Vue.component('login',login);
var vm=new Vue({
el:"#app",
data:{
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2. 直接使用Vue.component方法:
<div id="app">
<login></login>
</div>
<script>
Vue.component('register',{
template:"<h1>注册</h1>"
});
var vm=new Vue({
el:"#app",
data:{
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3.将模板字符串,定义到script标签中或者template标签中
<div id="app">
<denglu></denglu>
<zhuce></zhuce>
</div>
<!-- 在APP外部定义 -->
<template id="temp2">
<div>注册</div>
</template>
<script id="temp" type="x-template">
<div>
<a href="#">登录</a>
</div>
</script>
<script>
Vue.component('denglu',{
template:"#temp"
});
Vue.component("zhuce",{
template:"#temp2"
})
var vm=new Vue({
el:"#app",
data:{
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 三,组件中data定义
- code:./8.component.html
<div id="app">
<counter></counter>
<counter></counter>
<counter></counter>
</div>
<template id="counter">
<div>
<input type="button" value="+1" @click="add">
{{count}}
</div>
</template>
<script src="vue.js"></script>
<script>
//计数器小例子 解释组件data为何以函数返回的形式存在
var obj={count:0}
Vue.component("counter",{
template:"#counter",
data(){
// return obj; //此种方式组件之间会互相影响
return {count:0}
},
methods:{
add(){
this.count++;
}
}
})
var vm = new Vue({
el: "#app"
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 四,使用components属性定义子组件
<div id="app">
<childrenc></childrenc>
</div>
<script>
var vm=new Vue({
el:"#app",
components:{
childrenc:{
template:"<div><h1>我是子组件</h1><smallc></smallc></div>",
components:{
smallc:{
template:"<h3>我是小小</h3>"
}
}
}
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 五,切换组件
- code:./9.tagglec.html
# 1.使用标识符,结合if/else切换(适合三个以内)
<div id="app">
<a href="#" @click.prevent="flag=true">登录</a>
<a href="#" @click.prevent="flag=false">注册</a>
<login v-if="flag"></login>
<register v-else></register>
</div>
<template id="login">
<div>登录</div>
</template>
<template id="register">
<div>注册</div>
</template>
<script src="vue.js"></script>
<script>
Vue.component("login",{
template:"#login"
})
Vue.component("register",{
template:"#register"
})
var vm=new Vue({
el:"#app",
data:{
flag:true
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 2.使用:is属性切换不同的子组件,并添加动画
- code:./9.tagglec2.html
<div id="app">
<a href="#" @click.prevent="flag='login'">登录</a>
<a href="#" @click.prevent="flag='register'">注册</a>
<component :is="flag"></component>
</div>
<template id="login">
<div>登录</div>
</template>
<template id="register">
<div>注册</div>
</template>
<script src="vue.js"></script>
<script>
Vue.component("login",{
template:"#login"
})
Vue.component("register",{
template:"#register"
})
var vm=new Vue({
el:"#app",
data:{
flag:"login"
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28