# alarm-mgmt-vue **Repository Path**: xiaobailongxx_lihanminxx/alarm-mgmt-vue ## Basic Information - **Project Name**: alarm-mgmt-vue - **Description**: 学习使用vuecli开始和管理一个项目,将这前写的告警、用户功能在这上面实现,做一个告警管理系统。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-04-08 - **Last Updated**: 2021-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README <<<<<<< HEAD # 背景 使用 vue-cli搭建项目并完成告警功能模块的开发。 主要功能: * 可以增删改查告警历史 * 可以增删改查告警配置 技术栈: * 后端使用之前已经用express搭好的接口 * 前端使用Vue + element # 安装 ```cmd $ git clone https://gitee.com/xiaobailongxx_lihanminxx/alarm-mgmt-vue.git $ cd alarm-mgmt-vue $ npm run serve ``` # Vue粗解 ## 路由 访问 http://127.0.0.1:3000/alarm/list 这时候走到 route.js里找到设定好的路由alarm再找下在子路由 list。 ![image-20210413091415333](C:\Users\Li Hanmin\AppData\Roaming\Typora\typora-user-images\image-20210413091415333.png) 这两个路由都有已经指定好的模块Alarm, AlarmList ```js { path: '/alarm', meta: { title: 'Alarm' }, component: Alarm, children: [{ path: '', meta: { title: 'Alarm' }, redirect: 'list' }, ... { path: 'list', meta: { title: 'Alarm' }, component: AlarmList, beforeEnter: (to, from, next) => { // console.log(this.$route) next() }, }, ... ] }, ``` 这两个组件之前都有导入过,分别对应一个页面 ```js const Alarm = () => import ('../views/Alarm.vue') const AlarmList = () => import ('../views/AlarmList.vue') ``` ../views/Alarm.vue 里会放一个 标签,这个标签的作用就是用于显示子路由AlarmList的信息。 同样的Alarm.vue的信息之所以能展示是因为 app.vue里放了一个相同的标签,所以app.vue是所有页面的开始 ```js ``` ../views/AlarmList.vue ```js ``` app.vue ```js ``` 最终就会在页面上展示下面这样的 ![image-20210413092306175](C:\Users\Li Hanmin\AppData\Roaming\Typora\typora-user-images\image-20210413092306175.png) ## slot-scope使用 使用 slot-scope 将子组件的数据传递给父组件 当子组件使用 :data绑定数据时,这个数据如果想在父组件里展示必须要使用 slot-scope ```js ``` 父组件时使用slot-scope将子组件的值传递给指定的变量,然后在就可以取出这个变量的数据 ```js ``` ## route-view和模块的区别 route-view是用显示子页的内容,所以app.vue里要放一个route-view,因为其他的全部是它的子页。 模块就是你想什么时候用就直接导入放在那里,这样来讲模块其实更灵活。 ## vue 父子通信 父传子用需要在调用子模板时,在标签属性上把父的数据绑定上去。 ```js ``` 父模板里data里有定义好的 PapaIsAddFormShow data() { let list = []; return { statusOptionValue: this.$store.state.statusOptionValue, alarmlist: list, PapaIsAddFormShow: true, input2: "Opend", statusOptions: this.$store.state.statusOptionValue, }; }, 然后在子模板中通过prpos里设置参数来接这个绑定的值 ```js export default { name: "AddAlarmRecord", props: ["SonHideAddForm"], data() { return { … } ``` *注意**:* *爸爸绑定在哪个变量上,**propos**里的要放一样的名字,不然接不住。* 这个时候就可以在子模板里随便使用了,用this.SonHideAddForm就可以直接访问。 ================= **但是**如果你想在子模板里直接修改父传过来的变量,不好意思,给你个报错。 void mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "secondlist" ### 方法一: **父组件:** 想要通过子改父,这个东西得父同意且做好准备,所以在上面父调子的时候,需要再绑定一个动作SonHideAddForm,这个函数专门用来接收子传递过来的修改请求,并将已经定义好的函数给这个绑定动作。 ```html ``` 父组件里定义好了,val是准备接子组件传过东西 ```js PapaHideAddForm(val) { this.PapaIsAddFormShow = val; }, ``` **子组件:** 定义函数通过$emit去通过父组件执行函数 SonHideAddForm ,并将第二个参数做为值传递过去。 hideAddForm() { //这个SonHideAddForm是父组件绑定的名字,要相同也要加引号 // 第二个就是传过的的参数了 this.$emit("SonHideAddForm", false); }, 设置触发 Cancel 但是这个也有个问题,还没有做到双向绑定,当父组件里的值修改了,子不会再感知到了。 ### 方法二:还是使用vuex吧 # 功能模块 ## 封装axios成API 封装AXIOS成request D:\vue\alarm\alarm-mgmt-vue\src\network\request.js ```js import axios from 'axios' import { MessageBox, Message } from 'element-ui' const service = axios.create({ baseURL: 'http://127.0.0.1:3000', // url = base url + request url timeout: 5000 // request timeout }) service.interceptors.request.use( config => { config.headers['Content-Type']  =  'application/x-www-form-urlencoded;charset=UTF-8' return config }, error => { console.log(error) // for debug return Promise.reject(error) } ) service.interceptors.response.use( response => { const res = response.data return res }, error => { console.log('err' + error) // for debug Message({ message: error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } ) export default service ``` 封装成API D:\vue\alarm\alarm-mgmt-vue\src\api\alarm.js ```js import request from '@/network/request' export function fetchAlarmHis(query) { return request({ url: '/alarm/getAlarmHis', method: 'get', params: query }) } ``` 调用D:\vue\alarm\alarm-mgmt-vue\src\components\content\AlarmRecord.vue ```js export default { name: "AlarmRecord", data() { const list = {}; return { alarmlist: list, }; }, created() { fetchAlarmHis().then((response) => { this.alarmlist = response.data; console.log("this.alarmlist :>> ", this.alarmlist); console.log(" response :>> ", response); }); }, }; ``` ## API测试 * 导入API * 将API展示提供测试按钮 * 点击调用测试函数同时传递API实体,指的对应的函数 * 在data里提前定议好参数,如果没有参数的填空,执行前先取参数 ```js ``` # FAQ ## url #模式改为成history模式 route/index.js里将mode设置为history, 修改前url里会有个# http://localhost:8081/#/user 修改后没有 http://localhost:8081/user ```js const router = new VueRouter({ routes, mode: 'history' }) ``` ## vue页面从url获取参数 app.vue ```js ``` index.js ```js { path: '/user/:userId', name: 'User', component: User } ``` user.vue ```js

i'm as user {{ this.$route.params.userId }}

``` ## 引用通过props传递参数给模板 在模板上面设置一个参数path,是放在props里,props相当于是标签的属性,比如class id这些,绑定点击时将路由到这个path navbarItem.vue ```js ``` 在引用的时候怎么将path传过去? 只需要在模块的标签里加复制语句即可 src\App.vue ```js ... ``` ## vue-cli4怎么起别名 现在的vue-cli4上是没有vue.config.js这个文件的,需要在src的同级目录下新建一下 vue.config.js ```js const path = require('path'); //引入path模块 function resolve(dir){ return path.join(__dirname,dir) //path.join(__dirname)设置绝对路径 } module.exports={ chainWebpack:(config)=>{ config.resolve.alias //set第一个参数:设置的别名,第二个参数:设置的路径 .set('@',resolve('./src')) .set('assets',resolve('./src/assets')) .set('components',resolve('./src/components')) .set('views',resolve('./src/views')) } } ``` 配置完成后需要重启项目,是退出后重新运行 npm run serve ## 报错Uncaught (in promise) ======= # vue-vuecli #### 介绍 学习使用vuecli开始和管理一个项目,将这前写的告警、用户功能在这上面实现,做一个告警管理系统。 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) >>>>>>> bf1f70463515c126a653edbe0a3b698ea65a527c