一、vue 基础
1、使用和模板语法
1、变量输出
1 | <div id="app"> |
1 | let app = new Vue({ |
2、html输出
1 | <div id="app"> |
1 | let app = new Vue({ |
区别在于: 这种如果message中包含html 内容,会被转义;要渲染 html 内容 需要使用 v-html 指令
2、常用指令
- v-if 根据条件渲染
1 | <div id="app"> |
1 | let app = new Vue({ |
- v-show 根据条件显示&隐藏
1 | <div id="app"> |
1 | let app = new Vue({ |
- v-if 和 v-show 的区别, v-if 是条件成立,才会渲染元素、但 v-show 是元素渲染出来,只是改变css display 属性
- v-for 循环渲染
1 | <div id="app"> |
1 | let app = new Vue({ |
- v-model 表单绑定
1 | <div id="app"> |
1 | let app = new Vue({ |
- v-bind 绑定变量
1 | <div id="app"> |
1 | let app = new Vue({ |
- v-on 监听事件
1 | <div id="app"> |
1 | let app = new Vue({ |
注意事项
- v-if 和 v-show 的区别 v-if 只有条件满足才会渲染,v-show 只是控制 css display 属性, html 始终是会渲染出来的; v-show 必须作用在真实的 html 上面, v-if 还可以使用在
上面, v-for 也可以使用 `````` 标签上面 1
2
3
4
5
6
7
8
9
10* v-for 作用在 html 标签上, 需要定义唯一属性key
* v-on 可以简写为 @; v-bind 可以简写为 :
* v-on 绑定事件,还可以使用修饰符; 常用的 stop 阻止冒泡,prevent 阻止默认行为 [其他修饰符](https://cn.vuejs.org/v2/guide/events.html#%E4%BA%8B%E4%BB%B6%E4%BF%AE%E9%A5%B0%E7%AC%A6)
```html
<div id="app">
<a @click.prevent.stop="show = !show" :href="url">
{{ show ? '隐藏' : '显示' }}
</button>
</div>
1 | let app = new Vue({ |
- v-model 也有修饰符
- number (转为数字,可以转才会转)
- lazy(change 事件触发变更数据)
- trim (去除两边空格)
3、组件
1、定义
1 | <div id="app"> |
1 | // 定义一个组件(全局) |
2、props 传值
1 | <div id="app"> |
1 | // 定义组件(全局) |
3、向父组件通知事件
1 | <div id="app"> |
1 | // 定义组件(全局) |
4、我们用到的其他插件
二、目前前端项目
1、目录结构
1 | public 前端资源 |
2、项目规范
- 页面组件文件命名为大驼峰,可以通过功能(或者路径)建立目录
- 组件的样式必须有命名空间,防止组件样式相互污染
- store中异步 action 使用co包裹 , 不处理异常
- store中的 action 定义必须以 Action 后缀结束 , 避免在map到组件中产生冲突
- store中的 state 定义必须和业务相关 , 避免使用 (list / data / item)这样无意义的数据 , 以提高在组件内数据识别度/冲突
- store中的 mutations 定义为加前缀 set / save / change 和具体的 state
- vue组件中使用 vuex 提供的 map系列函数 , 避免直接使用 this.$store对象
- components 为通用组件库 , 所有目录下面必须有 index.js , 组件必须逐级导出的 @components 顶级
- components/buissiz 为业务组件库 , 可以根据需求随意更改 , 其他组件库更改需谨慎 ,一般情况下不要更改 ,可以写业务员组件来增强通用组件的功能。如更改 , 必须考虑 兼容性 / 易用性 / 扩展性 / 独立性 等等
- css使用less ,(!!!!)不要混用 , 由于要和ivew保持一致 , ivew 使用 less , 而且项目有less通用变量 (accesset/common.less),有条件的尽量使用 less 变量
补充:
动态路由和路由传递参数
定义
1 | const router = new VueRouter({ |
上面路由定义 /user/123 和 /user/456 都能匹配到
路由参数获取
- 在组件里面可以通过 this.$route.params.id 获取的路由参数
- 视图里面可以通过 $route.params.id 获取路由参数
1 | <template> |
在组件中手动跳转到动态路由
- 方式一: 自动拼接路由 this.$router.push(“/user/“ + user.id)
- 方式二: 通过路由名称 this.$router.push({name: “user”, params: {id: user.id}})
通过 query 方法在路由中添加参数
组件中通过
1 | this.$router.push({path: "/user/1", query: {id: 1, "name": 123}}) |
注意在组件中 this.$route 和 this.$router 是两个对象,this.$route 表示当前路径;this.$router 表示路由对象
5、页面组件开发
页面尽量保持简单 , 一个页面不要写过多的业务逻辑 , 就好比PHP中的controller , 负责调度就好
约定: 如果目录中包含 index.vue 那么这个文件就是 page 的入口 , 其他文件则为改页面的私有组件 , 否则改页面没有私有组件
1. vue 单文件组件
文件定义
1 | <template> |
在组件中使用 store 中的数据和方法
1 | <template> |
在组件中请求接口
- 接口定义都在service 下面定义
1 | // 主商户列表 |
- 组件中调用接口
1 | <template> |
2. vuex 状态管理(所有组件数据共享)
开始使用
1 | import vuex from 'vuex' |
挂载到APP组件上
1 | import Vue from 'vue' |
模块文件定义
1 | import co from "co" |
在非组件js 文件中使用 store 状态管理
1 | // 引入store 对象 |