5. Vue.js开发基础

5.1. 1. 安装Vue.js与脚手架

  • 开发简单的网页时,通常导入 Vue 的独立 js 文件即可。

  • 构建大型项目时,通常用 npm 安装 Vue :npm install vue

  • npm 包 @vue/cli 提供了一个命令行工具 vue ,用于创建、构建 Vue 项目。

vue官方网站:https://cn.vuejs.org/

Vue.js的官方示例一般是JS文件,使用<script>标签引入。

<!-- 开发环境版本 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

cdn 加速地址:

https://cdn.baomitu.com/vue

https://www.bootcdn.cn/

如采用.vue文件的方式,首先需要使用如下命令安装vue模块:

5.1.1. 1.1 安装淘宝镜像

因为npm比较慢,这里我安装一下国内 淘宝镜像 ,执行指令:

# 使用npm淘宝镜像,避免npm下载速度过慢的问题
npm install -g cnpm --registry=https://registry.npm.taobao.org

安装完成 淘宝镜像 后可以直接执行以下指令

#查看 cnpm版本号
cnpm -v

5.1.2. 1.2 安装vue-cli

vue脚手架 指的是 vue-cli ,它是一个专门为 单页面应用快速搭建繁杂项目的脚手架 ,它可以轻松的创建新的应用程序而且可用于 自动生成vue和webpack的项目模板

1.先卸载原来全局安装的vue-cli

cnpm uninstall -g vue-cli

2.安装新版vue-cli

cnpm install -g @vue/cli

3.查看vue-cli版本号

vue --version

或者

vue -V

4.查看webpack版本号

npm info webpack

5.1.3. 1.3 创建项目

创建项目2种方式

1.用指令的方式创建项目vue create 后面的英文为 项目名称

vue create vue-demo

2.使用vue ui来创建项目,vue ui是vue-cli提供的可视化的项目管理工具

vue ui

5.1.4. 1.4 相关工具

5.2. 2.告别webpack配置!vue UI

推荐使用 vue ui脚手架来创建项目。

https://www.kancloud.cn/wangjiachong/vue_notes/1964087

注意:使用vue-cli构建的项目没有Webpack的相关配置,这并不意味着项目没有使用Webpack,因为vue-cli本身就是一个基于Webpack构建的Vue.js专属构建工具。

5.2.1. 2.1参考如下文献

5.3. 3.Vue.js条件渲染

条件渲染就是根据不同的条件显示不同的内容。Vue.js中的条件渲染使用v-if命令,该命令判定结果是一个布尔类型,true代表条件判定正确,元素显示在界面中,false代表元素被隐藏。

注意:JavaScript不是一门强类型语言,因此类似于非空字符串、非0数字和Object对象都被认为是true,而0和undefined则被认为是false。

示例:

vueTest.vue

<template>
  <div id="app">
    <h1 v-if="showItem">显示第一条</h1>
    <h1 v-if="noshowItem">显示第一条</h1>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      showItem: true,
      noshowItem: false
    }
  },
  created () {
    console.log('Hello Vue')
  }
}
</script>

<style scoped>

</style>

在main.js中引入该文件,代码如下:

import Vue from 'vue'
import router from './router'
import App from './views/vueTest'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

然后使用npm run dev命令启动开发测试服务器,将会打开一个http://localhost:8080/浏览器页面

注意:本节的测试代码均需在main.js中引入./views/vueTest目录下创建的vue文件

5.4. 4.Vue.js列表渲染

Vue.js也提供用于列表渲染的v-for语句,和其他编程语言一样,for提供的迭代功能可以逐条输出一些重复出现的内容。v-for语句需要配合in关键字一起使用,语法如下:

v-for="item in items"

其中,items为已经定义的数据名称和内容,item为使用v-for语句时的变量别名。

示例:

创建一个vue项目

Testforvue.vue

<template>
  <div id="app">
    <div v-for="city in citys" :key="city">
      {{ city }}
    </div>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      citys: ['beijing', 'shanghai', 'shenzhen', 'guangzhou']
    }
  }
}
</script>

<style scoped>

</style>

除了循环输出数据本身外,v-for还可以新增index序列号

<template>
  <div id="app">
    <div v-for="(city,index) in citys" :key="city">
      编号:{{index}}          城市:{{ city }}
    </div>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      citys: ['beijing', 'shanghai', 'shenzhen', 'guangzhou']
    }
  }
}
</script>

<style scoped>

</style>

除了循环输出数据本身外,v-for还可以输出对象的值

<template>
  <div id="app">
    <div v-for="(city,index) in citys" :key="city">
      <h3>编号:{{ index }}</h3>
      <h4>城市:{{ city.city }} 缩写:{{ city.Name }}</h4>
    </div>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      citys: [
        { city: 'beijing', Name: 'BJ' },
        { city: 'shanghai', Name: 'SH' },
        { city: 'shenzhen', Name: 'SZ' }
      ]
    }
  }
}
</script>

<style scoped>
h3, h4 {
  text-align: center;
}
</style>

上述代码循环输出一个对象,该对象包含city和Name元素,并且嵌套了

标签

5.5. 5.Vue.js输入监听

在所有的Web服务中,输入信息的功能是必须具备的。不管是用户填写表单,还是执行搜索,都需要输入文本框,这些输入文本框在网页中通常称为表单标签。在常见的HTML网页中,表单类标签使用

标签包裹,当用户单击“提交”按钮时,

中所有标签的键(name属性)和值(value属性)都会被发送到指定的后台路径中进行处理。但在Vue.js中需要将每个标签与对应的值(变量)进行绑定,然后通过JavaScript中的变量获取用户输入的值。下面这段JavaScript代码实际上起到的作用就是输入监听。

Vue.js使用v-model属性绑定值示例

<template>
  <div id="app">
    <input placeholder="输入想在下方显示的内容" v-model="inputValue"/>
    <p>{{ inputValue }}</p>

  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      inputValue: ''
    }
  }
}
</script>

<style scoped>

</style>

不仅是文本框,任何一个符合表单输入的标签都可以使用v-model绑定,这些标签包括选择框、多行文本、单选按钮和复选框等。

<template>
  <div id="app">
    <input placeholder="输入想在下方显示的内容" v-model="inputValue"/>
    <p>{{ inputValue }}</p>

    <input type="checkbox" placeholder="请输入想在下方显示的内容" v-model="inputbox"/>
    <p>{{ inputbox }}</p>

  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      inputValue: '',
      inputbox: ''
    }
  }
}
</script>

<style scoped>

</style>

v-model属性支持.lazy.number.trim修饰符,这些修饰符的作用如下:

  • .lazy:懒输入,不会在同步输入时更新,只有当输入发生改变时(change事件发生时)才更新绑定变量的值。-

  • .number:自动将所有的输入转换为Number形式,如果不能被正确解析,则返回原来的字符串形式。

  • .trim:消除用户输入的首尾空格。修饰符的作用是减少不必要的值的格式转化,从而减轻基本的页面的性能压力。

修饰符的使用

<template>
  <div id="app">
    <input placeholder="输入想在下方显示的内容" v-model="inputValue"/>
    <p>{{ inputValue }}</p>

    <input type="checkbox" placeholder="请输入想在下方显示的内容" v-model="inputbox"/>
    <p>{{ inputbox }}</p>
    <!--    使用装饰符-->
    <p></p>
    <p></p>
    <input placeholder="输入想在下方显示的内容" v-model.lazy="inputValue1"/>
    <p>{{ inputValue1 }}</p>
    <input placeholder="输入想在下方显示的内容" v-model.number="inputValue2"/>
    <p>{{ inputValue2 }}</p>
    <input placeholder="输入想在下方显示的内容" v-model.trim="inputValue3"/>
    <p>{{ inputValue3 }}</p>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      inputValue: '',
      inputbox: '',
      // 绑定修饰符
      inputValue1: '',
      inputValue2: '',
      inputValue3: ''
    }
  }
}
</script>

<style scoped>

</style>

5.6. 6. Vue.js事件处理-v-on绑定

v-on命令作用于所有的DOM,它的主要功能是实现事件的监听。v-on绑定的事件被触发时,将执行已经定义的代码。

在Web中最常见的事件就是按钮的click事件,表单提交以及网页与用户的交互都通过这类按钮事件实现。不仅是按钮的单击事件,包括提到的change事件和input事件等均属于DOM中的事件。Vue.js的这类事件都通过v-on进行绑定。

click事件绑定。

<template>
  <div id="app">
    <button v-on:click="jump">单击弹窗</button>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {}
  },

  // v-on绑定方法
  methods: {
    jump () {
      alert('发生了按钮的单击')
    }
  }
}
</script>

<style scoped>

</style>

需要注意的是,jump()方法定义在methods对象中,这不是和data平级的方法。

v-on绑定的方法还可以调用定义在methods对象内部的其他方法。例如:

<script>
export default {
  name: 'app',
  data () {
    return {}
  },

  // v-on绑定方法
  methods: {
    jump () {
      this.jump2()
    },
    jump2 () {
      alert('发生了按钮的单击')
    }
  }
}
</script>

上述代码的执行效果和前面的代码一致,均会弹出一个窗口。

当然也可以在事件绑定过程中传递参数。

<template>
  <div id="app">
<!--    <button v-on:click="jump">单击弹窗</button>-->
<!--    简写,一般多使用简写-->
    <button @click="jump">单击弹窗</button>
    <button @click="jump11(11)">{{ name11 }}</button>
    <button @click="jump22(22)">{{ name22 }}</button>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      name11: '单击弹窗11',
      name22: '单击弹窗22'
    }
  },

  // v-on绑定方法
  methods: {
    jump () {
      this.jump2()
    },
    jump2 () {
      alert('发生了按钮的单击')
    },
    jump11: function (num) {
      console.log(num)
      alert(this.name11 + '参数获得' + num)
    },
    jump22: function (num) {
      console.log(num)
      alert(this.name22 + '参数获得' + num)
    }
  }
}
</script>

<style scoped>

</style>

除了click事件外的其他事件也可以使用相应的方法进行绑定。

将一个标签实现的文本输入框通过v-on命令绑定input()方法,以实现输入内容的实时监听。代码如下:

<template>
  <div id="app">
    <input placeholder="请在下面输入要显示的内容" v-on:input="textInput" v-model="inputValue"/>
    <p>{{ inputValue }}</p>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      inputValue: ''
    }
  },

  // v-on绑定方法
  methods: {
    textInput: function () {
      console.log(this.inputValue)
    }
}
</script>

<style scoped>

</style>

关于v-on命令的语法可以总结为如下2种形式:

<!--    <button v-on:click="jump">单击弹窗</button>-->
<!--    简写,一般多使用简写-->
<button @click="jump">单击弹窗</button>