内容大部分文字描述来自尚硅谷课件,实例操作截图和注释内容为亲测。
npm install -g vue-cli
vue init webpack vue_demo
cd vue_demo
npm install
npm run dev
访问: http://localhost:8080/
注释:
"vue init webpack vue_demo"中的"webpack"为固定的,即使使用webpack作为模板,提供六套模板。"vue_demo"为自起的项目名称,不可以包含大写字母。
官方文档:https://github.com/vuejs/vue-cli/tree/master
确认即可
听说得下载很久,但是我还是点下载了。
|-- build : webpack 相关的配置文件夹(基本不需要修改)
|-- dev-server.js : 通过express 启动后台服务器
|-- config: webpack 相关的配置文件夹(基本不需要修改)
|-- index.js: 指定的后台服务的端口号和静态资源文件夹
|-- node_modules
|-- src : 源码文件夹
|-- components: vue 组件及其相关资源文件夹
|-- App.vue: 应用根主组件
|-- main.js: 应用入口js
|-- static: 静态资源文件夹
|-- .babelrc: babel 的配置文件
|-- .eslintignore: eslint 检查忽略的配置
|-- .eslintrc.js: eslint 检查的配置
|-- .gitignore: git 版本管制忽略的配置
|-- index.html: 主页面文件
|-- package.json: 应用包配置文件
|-- README.md: 应用描述说明的readme 文件
什么是组件化
组件是包含一个功能界面的所有元素的集合。
参考文档:https://www.kancloud.cn/zep-tsang/components/341917
初始化界面的三个文件
App.vue
main.js
/*
入口JS:创建Vue实例
*/
import Vue from 'vue'
import App from './App.vue'
new Vue({
el : '#app',
components: {
App
},
template: ' '
})
HelloWorld.vue
{{msg}}
npm run build
npm install -g serve
serve dist
访问: http://localhost:5000
修改配置: webpack.prod.conf.js
output: {
publicPath: ‘/xxx/’ //打包文件夹的名称
}
重新打包:
npm run build
修改dist 文件夹为项目名称: xxx
将xxx 拷贝到运行的tomcat 的webapps 目录下
访问: http://localhost:8080/xxx
注释:
规则不符合会报错,但是不影响代码执行。
使用格式化文档会减少规则报错
配置:
修改.eslintrc.js文件
把认为不需要报错的设置为off或者0,可以0,1,2,根据自身要求。
页面模板
// 方式一: 通过v-on 绑定
@delete_todo="deleteTodo"
// 方式二: 通过$on()
this.$refs.xxx.$on('delete_todo', function (todo) {
this.deleteTodo(todo)
})
// 触发事件(只能在父组件中接收)
this.$emit(eventName, data)
PubSub.subscribe(‘msg’, function(msg, data){})
PubSub.publish(‘msg’, data)
此方式用于父组件向子组件传递标签数据
不确定的标签结构1
组件确定的标签结构
不确定的标签结构2
xxx 对应的标签结构
yyyy 对应的标签结构
在static下创建comment_page文件夹
comment_page文件夹下三个文件构成静态页面
bootstrap.css,利用到bootstrap技术
index.css
.reply {
margin-top: 0px;
}
li {
transition: .5s;
overflow: hidden;
}
.handle {
width: 40px;
border: 1px solid #ccc;
background: #fff;
position: absolute;
right: 10px;
top: 1px;
text-align: center;
}
.handle a {
display: block;
text-decoration: none;
}
.list-group-item .centence {
padding: 0px 50px;
}
.user {
font-size: 22px;
}
index.html
Title
三步:
1.拆,把页面拆成不同部分。
2.静,哪些是静态页面,直接渲染生成。
3.动,动态页面,初始化和动态加载。
请发表对Vue的评论
main.js
import Vue from 'vue'
import App from './App.vue'
new Vue({
el: '#app',
components: {App},
template: ' '
})
components下三个vue文件,本应该是三个文件夹,因为此例没有图片,简化为三个vue文件。
Add.vue
List.vue
评论回复:
暂无评论,点击左侧添加评论!!!
Item.vue
{{comment.name}}说:
{{comment.content}}
import Vue from 'vue'
import App from './App.vue'
import './base.css'
new Vue({
el: '#app',
components: {App},
template: ' '
})
base.css
/*base*/
body {
background: #fff;
}
.btn {
display: inline-block;
padding: 4px 12px;
margin-bottom: 0;
font-size: 14px;
line-height: 20px;
text-align: center;
vertical-align: middle;
cursor: pointer;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
border-radius: 4px;
}
.btn-danger {
color: #fff;
background-color: #da4f49;
border: 1px solid #bd362f;
}
.btn-danger:hover {
color: #fff;
background-color: #bd362f;
}
.btn:focus {
outline: none;
}
App.vue
已完成{{ completeSize }} / 全部{{ todos.length }}
storageUtil.js
// 使用localStorage存储数据的工具模块
// 1.函数 :1个功能
// 2.对象 :2个功能
// 需要向外暴露1个功能还是多个功能
const TODOS_KEY = "todos_key"
export default {
saveTodos (todos) {
window.localStorage.setItem(TODOS_KEY, JSON.stringify(todos));
},
readTodos () {
return JSON.parse(window.localStorage.getItem(TODOS_KEY) || "[]")
}
}
TodoHeader.vue
TodoList.vue
TodoItem.vue
TodoFooter.vue