# vue-firebase-study **Repository Path**: falcon/vue-firebase-study ## Basic Information - **Project Name**: vue-firebase-study - **Description**: 我学习vue和firebase的笔记和练习代码 - **Primary Language**: JavaScript - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-22 - **Last Updated**: 2021-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #学习Vue 和 Firebase ## 🛠️ 资源 [Vue.js 官网中文文档 (v2)](https://cn.vuejs.org/v2) [Vue-cli github](https://github.com/vuejs/vue-cli) [Vue-cli (Vue.js 开发的标准工具) ](https://cli.vuejs.org/zh/) ## Day 1 - Vue.js的引入 - 数据绑定 - 在模板使用函数 - 在模板中绑定属性`v-bind` ,可以使用 `:` 简写 - 在模板中绑定事件 `v-on` ,使用`@`简写,如 `@click="methodName"` - 使用 `v-model` (未深入) - 使用 修饰器 键盘/事件 修饰器,(未深入) - 模板基本语法,条件,循环(未深入) ## Day 2 因为版本更新,这块跟视频的差别很大,当前使用 版本 `vue --version` > @vue/cli 4.3.1 - `vue-cli` 安装: ``` npm install -g @vue/cli ``` 快速原型开发 `vue serve` ,默认入口可以是 main.js、index.js、App.vue 或 app.vue 中的一个 - 创建一个项目 ``` vue create yourProject ``` 运行 ``` cd yourProjectPath npm run serve # 相当于 node_modules/.bin/vue-cli-service serve ``` 查错 ``` npm run lint ``` 以上命令注册在项目的 `package.json`的`scripts`项中 创建项目时可以设定配置,加入相应的组件 - 保存预设配置 - 安装plugins 如安装 `vue-plugin-vuetify` 对应到 `package.json`的 `devDependencies`项目 ``` vue add vuetify ``` ## Day3 - 构建web component 用法 ``` vue build -h -t, --target Build target (app | lib | wc | wc-async, default: app) -n, --name name for lib or web-component mode (default: entry filename) -d, --dest output directory (default: dist) -h, --help output usage information ``` 如将`online.vue`构建为`online-status`的 `web component` ``` vue build online.vue --target wc --name online-status ``` - 使用 `web component` 如使用之前构建的 `online-status` ``` online-status demo ... ... ``` - `vue ui` 图形化工具 `vue-cli 的 web图形化 界面` ## day4 -> day5 - ES6 - async - promise - await ## day6 2020.07.24 - 不必记住vue的`npm run`命令,因为项目的`package.json`文件可以找到这些命令 ``` javascript "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" } ``` - 运行开发服务器时出错 `npm run serve` ``` > vue-tobe@0.1.0 serve /Users/falcon/projects/js/vue-firebase/day6/vue-tube > vue-cli-service serve INFO Starting development server... ERROR Error: No valid exports main found for '/Users/falcon/projects/js/vue-firebase/day6/vue-tube/node_modules/colorette' Error: No valid exports main found for '/Users/falcon/projects/js/vue-firebase/day6/vue-tube/node_modules/colorette' ``` 解决方法有两个: 1. `npm i colorette@1.2.0` # 必须带版本号才管用 2. 升级 `node.js` `homebrew`安装的 `node.js` 有时并不是最新的版本,就算使用homebrew升级也升不到官方最新版本。`N`是node内置的版本管理器,使用`npm install -g n`安装,然后执行 `sudo n latest` 可升到最新版本。 ## day 7 2020.07.30 安装nvm ,node版本管理工具。 [项目用法和文档](https://github.com/nvm-sh/nvm) ``` brew install nvm ``` ### 常用的指令 - 查看版本 ``` nvm ls-remote #远程所有node版本 ``` ``` nvm ls #本地所有安装的node版本 ``` - 安装 ``` nvm install 版本 #如果版本写node,会安装最新版本的node并自动切换,如果填写lts,会安装lts版本,如果填写具体版本号,会安装指定版本 ``` - 设置默认版本 ``` nvm alias default node #使用最新版本 nvm alias default 'lts/*' #使用 `lts/*` 版本 nvm alias default 12.18.3 #使用 `12.18.3`版本 ``` - 切换当前使用的node版本 ``` nvm use #会使用~/.nvmrc 指定的 node 版本 ``` ``` nvm use 12.18.3 #使用12.18.3版本 ``` ``` nvm use node/stable/unstable #切换最新版本/稳定版本/lts ``` - 删除node版本 ``` nvm uninstall 8 #删除8.x版本 ``` ``` nvm uninstall unstable #删除unstable版本 ``` *ps: 使用nvm管理node版本后,全局安装模块时不需要用`sudo`* ## day8 2020.08.08 vue文档学习 - Vue 实例还暴露了一些有用的实例属性与方法。 它们都有前缀 `$` 如: ```js var vm = new Vue( el:'#app', data:{ name:"falcon" } ) console.log('实例属性') console.log(vm.$el) console.log(vm.$data) console.log (vm.$el === document.getElementById('app')) // => true // 这个回调将在 `vm.wage` 改变后调用 vm.$watch('wage', function(newVal, oldVal) { console.log(this, `wage change from ${oldVal} to ${newVal}`) } ); ``` - 不要在生命周期或实例方法里使用箭头函数, 如: ``` js created: () => console.log(this.a) vm.$watch('wage', (newVal, oldVal) => console.log(this,`wage change from ${oldVal} to ${newVal}`)) //这个this会向上查找不是vue实例,而是window ``` 因为箭头函数并没有 `this`,`this` 会作为变量一直向上级词法作用域查找,直至找到为止,经常导致 `Uncaught TypeError: Cannot read property of undefined` 或 `Uncaught TypeError: this.myMethod is not a function` 之类的错误 不改变值 ```js 这个值不会改变: wage: {{wage}} ``` 输出原始html ```js ``` 动态绑定属性/事件 >好像这个动态绑定的属性和事件名不能用驼峰写法?会自动转化成小写的data属性 ```html 动态绑定属性 动态绑定事件 ``` - 计算属性 ```js computed: { //计算属性 reversedName: function () { return this.name.split('').reverse().join('') } }, ``` >计算属性是基于它们的响应式依赖进行 *缓存* 的,只有相关的响应式依赖发生变化时才会重新计算。 >相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。 - 侦听属性 ```js watch: { firstName: function (val) { this.fullName = val + ' ' + this.lastName }, lastName: function (val) { this.fullName = this.firstName + ' ' + val } } ``` > 尽量使用计算属性而不是命令式的 `watch` 回调 - 计算属性的 setter 运行 `vm.label2 = "test" `时,`setter` 会被调用 ```js computed:{ label2: { get() { //getter return this.name + this.age + '@' + Date.now() }, set() { //setter console.log('Changed @' + Date.now()) this.name += ' hack'; } } } ``` - 侦听器 ```js watch: { ... } ``` vue项目的bin目录位于 `node_modules/.bin/` 运行`npm run serve` 相当于 `node_modules/.bin/vue-cli-service serve` [vue.js为什么在component的template的root标签中不能使用v-for?](https://segmentfault.com/q/1010000007411018) 如果后续安装 `vue-router`插件,`App.vue` 会被覆盖 - 使用 `Netlify` 免费部署 参考视频: [Deploy Websites In Seconds With Netlify](https://www.youtube.com/watch?v=bjVUqvcCnxM) 部署了github page: ## day9 2020.08.10 - 向组件中增加class 当在一个自定义组件上使用 class property 时,这些 class 将被添加到该组件的根元素上面。这个元素上已经存在的 class 不会被覆盖。 如: `组件Header.vue:` ```js ``` `引入Header的组件` ```js import Header from '../components/Header.vue'