Vue 根组件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>根组件</title>
</head>
<body>
<div id="app">
<h1>{{ title }}</h1>
<p>{{ title }}</p>sdfsdaf
sdfasdafsda
sdafsda
sdafsad
sdafsdaf
fsdaf
</div>
<div id="main"></div>
</body>
<script src="js/vue.js"></script>
<script>
// template就是一个组件的html实体代码块
new Vue({
el: '#app',
data: {
title: '根组件'
},
// template模板,书写html代码块
// 根组件也可以添加template模板,但是建议直接使用挂载点
// 每个组件的template模板中只能解析一个(第一个)根标签
template: `
<!--<div></div>-->
<div id="home">
<h1>{{ title }}</h1>
<p>{{ title }}</p>
<i>{{ title }}</i>
</div>
<div>
{{ title }}
</div>
`
});
// 只要是被new出来的vue实例都是根组件,所以一个vue单页面项目中只需要出现一次new创建的vue实例
new Vue({
el: '#main'
})
</script>
</html>
Vue 局部组件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>根组件</title>
</head>
<body>
<div id="app">
<!--<localTag></localTag>-->
<!--资源出现在哪个模板,该资源就由该模板的拥有者提供-->
<!--++++组件不能绑定系统事件,但可以绑定自定义事件++++-->
<abc @mouseenter="abcEnter">{{ info }}</abc>
<abc></abc>
</div>
<div id="main">
<local-tag></local-tag>
</div>
<!--<div class="localTag">-->
<!--<h2>我是局部组件</h2>-->
<!--<p style="color: red;">我是局部组件的文本解释</p>-->
<!--<p @click="btnClick">我被点击了 {{ num }} 下</p>-->
<!--<hr>-->
<!--</div>-->
</body>
<script src="js/vue.js"></script>
<script>
// 局部组件
// 子组件的资源有自身提供
var localTag = {
// 挂载点是根组件的独有特性
// el: '.localTag',
// 子组件必须拥有自身template
template: `
<div id="localTag">
<h2>我是局部组件</h2>
<p style="color: red;">我是局部组件的文本解释</p>
<p @click="btnClick">我被点击了 {{ num }} 下</p>
<hr>
</div>
`,
// 子组件的data为方法的返回值字典
data: function () {
return {
num: 0
}
},
methods: {
btnClick: function () {
this.num++
}
}
};
// 如果想在页面中看见子组件,需要在根组件中使用该子组件
// 如果根组件要使用局部子组件,需要提前注册
new Vue({
el: '#app',
data: {
info: "message"
},
components: {
abc: localTag,
},
methods: {
abcEnter: function () {
console.log('abc被悬浮了')
}
}
});
new Vue({
el: '#main',
components: {
// 在页面中才有 <local-tag></local-tag>
// localTag: localTag
// 'localTag': localTag
// 'local-tag': localTag
localTag
}
})
</script>
</html>
vue 全局组件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>全局组件</title>
</head>
<body>
<div id="app">
<global-tag></global-tag>
</div>
</body>
<script src="js/vue.js"></script>
<script>
// 全局组件与局部组件的不同点:全局组件不用注册
// 全局组件用Vue.component()来声明定义,两个参数
// 第一个为组件名,第二个为组件内容
Vue.component('globalTag', {
template: `
<div>
<h2>我是全局组件</h2>
<p style="color: red;">我是全局组件的文本解释</p>
<p @click="btnClick">我被点击了 {{ num }} 下</p>
<hr>
</div>
`,
data: function() {
return {
num: 1
}
},
// computed: {
// num: function() {
// return 1
// }
// },
methods: {
btnClick: function () {
this.num++
}
}
});
new Vue({
el: '#app',
data: {
}
})
</script>
</html>
Vue 组件通信
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>组件间的通信</title>
</head>
<body>
<div id="app">
<tag :super_msg="msg" @own_method="receiveInfo"></tag>
<p>{{ temp_info }}</p>
</div>
</body>
<script src="js/vue.js"></script>
<script>
// 父组件数据传递给子组件,通过自定义属性绑定的方式
// 子组件数据传递给父组件,通过自定义事件的发送
Vue.component('tag', {
props: ['super_msg'],
template: `
<div>
<h2 @click="sendInfo">{{ super_msg }}</h2>
</div>
`,
data: function () {
return {
info: '子级的信息'
}
},
methods: {
sendInfo: function () {
this.$emit('own_method', this.info)
}
}
});
new Vue({
el: '#app',
data: {
msg: '父级的数据',
temp_info: ''
},
methods: {
receiveInfo: function (info) {
this.temp_info = info
}
}
})
</script>
</html>
Vue-cli创建项目
项目部署操作
1 安装node环境 16.14.0环境
- 跟python比较
- node python
- npm pip3
- 安装cnpm,淘宝做的npm,以后使用npm的地方,都是用cnpm
2 安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
3 安装cli脚手架
cnpm install -g @vue/cli
4 清空缓存(安装失败操作)
npm cache clean --force
5 创建项目
vue create 项目名
6 安装vue-cookie(进入项目目录下安装)
cnpm install vue-cookie --save
7 安装vue-axios
cnpm install vue-axios --save
8 启动vue
nmp run serve
9 复制新项目(node_modules目录不需要拷贝)
npm install
5 vue 创建项目图形化操作