vue2学习详细

Vue.prototype.$xxproperty

Vue.prototype.$appName = ‘My App’
这样你可以通过在原型上定义它们使其在每个 Vue 的实例中可用。

new Vue({
beforeCreate: function () {
console.log(this.$appName)
}
})
控制台会打印出 My App。就这么简单!

“为什么 appName 要以 $ 开头?这很重要吗?它会怎样?”

$ 是在 Vue 所有实例中都可用的属性的一个简单约定。这样做会避免和已被定义的数据、方法、计算属性产生冲突。

vue环境变量配置——process.env

在用vue框架时,经常用到两种环境,一种是开发环境,就是本地开发时的环境,一种是生产环境,就是要发布到线上的环境。

平时开发是用生产环境的,如果发布到线上时,需要切换环境为线上。如果人为去切换也是可以的,但是会容易忘记,可以通过配置不同的运行命令来自动切换环境。

下面开始:

配置环境的实现原理
实现原理就是采用node.js顶层对象中的process.env(进程环境,返回一个包含用户环境信息的对象)属性,根据各个环境的配置文件区分和切换环境

具体实例
1.安装依赖
npm install process

2.创建.env.dev 和.env.prod两个文件
注意文件要创建在根目录下面

.env.dev文件内容如下:

NODE_ENV = 'development'
VUE_APP_TITLE = 'development'
/* 请求接口地址 */
VUE_APP_INTERFACE_URL="https://xxx"
/* proxy代理地址 */
VUE_APP_PROXYURL='http://xxx'
.env.prod文件内容如下:

NODE_ENV='production'
VUE_APP_TITLE='prod'
/* 请求接口地址 */
VUE_APP_INTERFACE="https://xxx"
```
3.设置项目启动时默认的环境
只需要在项目启动命令后面修改需要的环境就行了,例如npm run dev,把--mode dev改为--mode prod就变成了开发环境

package.json部分内容如下:

"scripts":{
	"dev":"vue-cli-service serve --mode dev",
	"prod":"vue-cli-service serve --mode prod"
}
4.查看环境是否配置成功
在main.js文件中打印当前环境,输出就成功了
console.log(process.env.NODE_ENV)

# $refs
vue $refs的基本用法
```html
<div id="app">
    <input type="text" ref="input1"/>
    <button @click="add">添加</button>
</div>
复制代码
<script>
new Vue({
    el: "#app",
    methods:{
    add:function(){
        this.$refs.input1.value ="22"; //this.$refs.input1  减少获取dom节点的消耗
        }
    }
})
</script>
```
复制代码
一般来讲,获取DOM元素,需document.querySelector(".input1")获取这个dom节点,然后在获取input1的值。
但是用ref绑定之后,我们就不需要在获取dom节点了,直接在上面的input上绑定input1,然后$refs里面调用就行。
然后在javascript里面这样调用:this.$refs.input1  这样就可以减少获取dom节点的消耗了

# vue使用心得
首先,vue.js是一个数据驱动视图的一个js框架,操作数据,然后实时反应到dom元素上的一个动态视图框架,它也是一个渐进式开发框架,比如,我用vue-cli搭建了一个本地开发环境,用nodejs跑了起来,当把vue引进来之后,要做项目还是远远不够的,就用到了vue全家桶
```txt
	      UI框架 : element-ui
	      http请求工具:axios(个人推荐用这个)
	      cookie工具:vue-cookie
	      构建工具:vue-cli
	      路由插件:vue-router
	      状态管理工具:vuex
	      滚动条插件:vuescroll
	      兼容IE的插件:babel-polyfill(当然vue只兼容到IE9+)
```

如果平时项目中你用到了哪些框架及插件,就可以通过npm install,下载下来,引入到项目中去就ok了
个人觉得项目目录结构可以是这个样子的

![在这里插入图片描述](https://img-blog.csdnimg.cn/838e33b13ab740a4829e0fd52a855f79.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qiL5qiL,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)
主要是src文件夹,assets主要用于放一些项目中的图片等之类的,compoents就放一些自己定义的组件,pages就放页面,当然都是vue文件啦,router放路由配置,server放一些静态目录什么的,放一些常量什么的都可以,store,熟悉vuex的小伙伴应该都知道,没错,就是放vuex的


#### 1.关于使用UI框架

一般我都是用element-ui这个ui框架,其中有一些ui组件特别好用,比如$message,提示组件,不用自己写,直接调用,就能用于增加,修改的一些功能,比如提示新增成功,修改成功等,还有按钮组件,弹出框组件等一些基本的组件,对于我自己写的其他代码后续几乎没有冲突,且灵活度高的,我就直接用了框架内的组件,但是一些可控性不强,且不够灵活,几乎不能改动的组件我就会选择自己写,比如树形控件,这个树形控件的样式特别单一,而且不可控,而且灵活度不高,我不是很喜欢,就利用vue的递归组件自己写树形控件,感兴趣的小伙伴可以看下我下篇博客,马上就发《vue如何用递归组件写树形控件》,总结一句话,灵活度高,就用框架,灵活度不高,就自己写,自己写的可控性很强!
#### 2.关于封装组件

有时候项目中经常会碰到这种情况,好几个页面的列表页除了表头不一样,几乎样式是一模一样的,这样的你就可以封装一个列表组件了,但是只适用于样式差不多的列表,如果你觉得都封装进一个组件里面,对后续开发的一些可控性不是很强,而且每个页面的需求都不一样,处理方式和方法都不很一样,那么我劝你还是老老实实自己写列表吧,因为你封装到一个组件中,对于每个页面的处理方式都要进行判断,这样会显得这个组件很臃肿,我觉得还不如分开写,所以是否要把一个功能模块封装进组件,灵活把握就可以了
#### 3.关于一些目录和http请求
关于一些目录,比如导航目录,一般是写死的,当然也有从后台获取的,我现在这个项目就是从后台获取目录,还有请求URL,和一些http请求,你就可以新建一个server目录,然后分模块的写道js文件夹里面,return出去,然后再在其他页面中引入,这样做的好处是,模块化管理,将常量和http请求进行统一管理,比如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/d9a53382d8c2437aa86d299abc74de1a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qiL5qiL,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
我就把http请求进行了统一管理,然后暴露出去,将来有改动我就可以直接改这里就可以了

#### 4.关于vuex
下面说一说vuex,也许有许多小伙伴对于这个都不知道干嘛用的,根据我的理解,vuex并不是那么神秘,就是一个公共状态库,是互不联系的两个组件的通信桥梁,比如我又一个列表组件1,又有一个列表组件2。这两个组件完全不一样,丝毫没有联系的那种,但是它们之间需要通信,比如都需要根据一个布尔值show来进行显示还是隐藏,这样就可以把这个show放进vuex状态库里面,当这个show改变的时候,这两个列表组件就可以根据show的变化自动的进行显示隐藏了

#### 5.关于http请求写在哪里的问题

我一开始接触vuex的时候,vuex里面有一个actions,既可以进行同步操作,又可以进行异步操作,官网上是推荐将http异步请求放在actions里面,因为当时刚学,没有判断能力,就按照官网上来写,在vue文件里面只写逻辑代码,而把所有的http异步请求全部写在了actions里面,这样问题就来了,首先mutations里面的函数必须要用它来提交,而且vue里面通过引入import { mapGetters , mapActions} from 'vuex',来获取到函数和状态,我发现写一个http需要写好多代码,我如果直接写道methods里面,就特别简单,后来我就在想到底放哪里简单些,综合了网上的一些看法,我觉得这跟个人代码风格有关系,官网是推荐写到actions里面,可是如果一个页面里面的一些http请求只是自己用,也不跟其他页面以及组件进行通信的话,我觉得没有必要写到vuex里面,写在methods里面反而简单些,反正到最后项目的数据都能流通就可以了,我觉得一些http请求得到的数据要和其他组件或页面共用的话,我觉得必须要放在vuex里面,这是最棒的办法,如果是自己在自己的小窝里小打小闹,也不影响别人,那么我们还是写在methods里面吧,毕竟别人又不用,为什么要把它驱逐家门呢,哈哈!!


# 安装
## 直接用 <script> 引入
直接用 <script> 引入
- 开发版本
- 生产版本
```html
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
```

## NPM
在用 Vue 构建大型应用时推荐使用 NPM 安装[1]。NPM 能很好地和诸如 webpack 或 Browserify 模块打包器配合使用。同时 Vue 也提供配套工具来开发单文件组件。
```txt
npm install vue
```

## 命令行工具 (CLI)
Vue 提供了一个官方的 CLI,为单页面应用 (SPA) 快速搭建繁杂的脚手架。它为现代前端工作流提供了开箱即用的构建设置。只需要几分钟的时间就可以运行起来并带有热重载、保存时 lint 校验,以及生产环境可用的构建版本。


## 对不同构建版本的解释
完整版:同时包含编译器和运行时的版本。

编译器:用来将模板字符串编译成为 JavaScript 渲染函数的代码。

运行时:用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。

## 运行时 + 编译器 vs. 只包含运行时
如果你需要在客户端编译模板 (比如传入一个字符串给 template 选项,或挂载到一个元素上并以其 DOM 内部的 HTML 作为模板),就将需要加上编译器,即完整版:
```js
// 需要编译器
new Vue({
  template: '<div>{
  { hi }}</div>'
})

// 不需要编译器
new Vue({
  render (h) {
    return h('div', this.hi)
  }
})
```

当使用 vue-loader 或 vueify 的时候,*.vue 文件内部的模板会在构建时预编译成 JavaScript。你在最终打好的包里实际上是不需要编译器的,所以只用运行时版本即可。

因为运行时版本相比完整版体积要小大约 30%,所以应该尽可能使用这个版本。如果你仍然希望使用完整版,则需要在打包工具里配置一个别名:


## 开发环境 vs. 生产环境模式

# 声明式渲染
Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:
```html
<div id="app">
  {
  { message }}
</div>
```
```js
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})
```
除了文本插值,我们还可以像这样来绑定元素 attribute:
```html
<div id="app-2">
  <span v-bind:title="message">
    鼠标悬停几秒钟查看此处动态绑定的提示信息!
  </span>
</div>
```
```js
var app2 = new Vue({
  el: '#app-2',
  data: {
    message: '页面加载于 ' + new Date().toLocaleString()
  }
})
```
v-bind将元素节点的 attribute 和 Vue 实例的property 保持一致。

# 条件与循环
## 条件
```html
<div id="app-3">
  <p v-if="seen">现在你看到我了</p>
</div>
```
```js
var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})
```

## 循环
```html
<div id="app-4">
  <ol>
    <li v-for="todo in todos">
      {
  { todo.text }}
    </li>
  </ol>
</div>
```
```js
var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: '学习 JavaScript' },
      { text: '学习 Vue' },
      { text: '整个牛项目' }
    ]
  }
})
```

# 处理用户输入
为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:

Vue 还提供了 v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。
```html
<div id="app-6">
  <p>{
  { message }}</p>
  <input v-model="message">
</div>
```
```js
var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!'
  }
})
```

# 组件化应用构建
组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:

在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。在 Vue 中注册组件很简单:
```js
// 定义名为 todo-item 的新组件
Vue.component('todo-item', {
  template: '<li>这是个待办项</li>'
})

var app = new Vue(...)
```
现在你可以用它构建另一个组件模板:
```html
<ol>
  <!-- 创建一个 todo-item 组件的实例 -->
  <todo-item></todo-item>
</ol>
```

# Vue 实例
## 创建一个 Vue 实例
一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的、可复用的组件树组成。举个例子,一个 todo 应用的组件树可以是这样的:
```txt

根实例
└─ TodoList
   ├─ TodoItem
   │  ├─ TodoButtonDelete
   │  └─ TodoButtonEdit
   └─ TodoListFooter
      ├─ TodosButtonClear
      └─ TodoListStatistics
```

## 数据与方法
当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。
```js
// 我们的数据对象
var data = { a: 1 }

// 该对象被加入到一个 Vue 实例中
var vm = new Vue({
  data: data
})

// 获得这个实例上的 property
// 返回源数据中对应的字段
vm.a == data.a // => true

// 设置 property 也会影响到原始数据
vm.a = 2
data.a // => 2

// ……反之亦然
data.a = 3
vm.a // => 3
```
当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时就已经存在于 data 中的 property 才是响应式的。也就是说如果你添加一个新的 property,比如:
```js
vm.b = 'hi'
```
那么对 b 的改动将不会触发任何视图的更新。如果你知道你会在晚些时候需要一个 property,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:
```js
data: {
  newTodoText: '',
  visitCount: 0,
  hideCompletedTodos: false,
  todos: [],
  error: null
}
```

这里唯一的例外是使用 `Object.freeze()`,这会阻止修改现有的 property,也意味着响应系统无法再追踪变化。

```js
var data = { a: 1 }
var vm = new Vue({
  el: '#example',
  data: data
})

vm.$data === data // => t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Vue3对于有Vue2经验的人来说可能存在一些挑战和麻烦。首先,Vue3引入了一些破坏性更改,这意味着原本在Vue2中使用的一些代码或库可能不再兼容Vue3。 其次,依赖的组件库(如ElementUI等)也可能存在破坏性更改,需要做相应的适配工作。 此外,Vue3引入了一些新的特性,如Vite、TypeScript和Pinia,需要学习和尝试这些新特性。 最后,如果你的项目是基于Vue2构建的,升级到Vue3可能会对项目的稳定性造成一定的破坏,因此迁移过程需要谨慎考虑。 如果你想学习Vue3,我建议你可以参考一些视频教程,比如在哔哩哔哩网站上有一些全栈实战的Vue3教程,可以帮助你了解Vue3的基础知识和实际应用。 此外,你还可以参考Vue3官方网站上的文档,了解Vue3的介绍和指南。 在学习过程中,你可能需要逐步迁移你的项目,并根据需要进行相关的学习和实践。 总结一下,学习Vue3对于有Vue2经验的人来说可能需要面对一些挑战和麻烦,包括破坏性更改、组件库适配、新特性尝试和项目迁移的稳定性问题。你可以通过观看视频教程和参考官方文档来学习Vue3,并逐步迁移你的项目。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue2 大型项目升级 Vue3 详细经验总结](https://blog.csdn.net/Kevinblant/article/details/126238184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [学习Vue3 第一章](https://blog.csdn.net/qq1195566313/article/details/122768533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值