当前位置:   article > 正文

Java前端 Vue2快速入门_/node_modules/vue/dist/vue.cjs.js

/node_modules/vue/dist/vue.cjs.js

1、MVVM思想

M:即Model,模型,包括数据和一些基本操作

V:即View,视图,页面渲染结果

VM:即View-Model,模型与视图间的双向操作(无需开发人员干涉)

MVVM之前,开发人员从后端获取需要的数据模型,然后要通过DOM操作Model渲染到View中。而后当用户操作视图,我们还需要通过DOM获取View中的数据,然后同步到Model中,而后当用户操作视图,我们还需要通过DOM获取View中的数据,然后同步到Model中

而MVVM中的VM要做的事情就是把DOM操作完全封装起来,开发人员不用再关心Model和View之间是如何互相影响的

4、Vue概念-Vue.js是什么?

Vue是一套用于构建用户界面的渐进式框架,与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或即有项目整合。另一方面,当与现代化的工具链以及各种类库结合使用时,Vue也完全能够为复杂的单页应用提供驱动。

安装Vue

使用node安装vue

1)初始化node        npm init -y

2) 安装vue                npm install vue

3、入门案例-Hello world

  1. <body>
  2. <div id="app">
  3. <h1> {{name}},非常帅</h1>
  4. </div>
  5. <!-- <script src="./node_modules/vue/dist/vue.cjs.js"></script> -->
  6. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  7. <script>
  8. let vm = new Vue({
  9. el: "#app",
  10. data: {
  11. name: "张三"
  12. }
  13. });
  14. </script>
  15. </body>

Vue基本语法&插件安装

  1. <body>
  2. <div id="app">
  3. <input type="text" v-model="num">
  4. <button v-on:click="num++">点赞</button>
  5. <button v-on:click="cancle">取消</button>
  6. <h1> {{name}},非常帅,有{{num}}个人为他点赞</h1>
  7. </div>
  8. <!-- <script src="./node_modules/vue/dist/vue.cjs.js"></script> -->
  9. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  10. <script>
  11. //1、vue声明式渲染
  12. let vm = new Vue({
  13. el: "#app", //绑定元素
  14. data: { //封装数据
  15. name: "张三",
  16. num: 1
  17. },
  18. methods: { //封装方法
  19. cancle() {
  20. this.num--;
  21. },
  22. hello(){
  23. }
  24. }
  25. });
  26. //2、双向绑定,模型变化,视图变化。反之亦然
  27. //3、事件处理
  28. //v-xx:指令
  29. //1、创建vue实例,关联页面的模板,将自己的数据(data)渲染到关联的模板,响应式的
  30. //2、指令来简化对dom的一些操作。
  31. //3、声明方法来做更复杂的操作。methods里面可以封装方法。
  32. </script>
  33. </body>

插件安装

VScode

        Vetur

        Vue2 Snippets

Chrome

        Vue-Devtools

5、指令

1)插值表达式

1.1花括号

{{表达式}}

1.2插值闪烁

使用{{}}方式在网速较慢时会出现问题,在数据未加载完成时,页面会显示出原始的`{{}}`,加载完毕后才显示正确的数据,我们称为插值闪烁

1) v-text和v-html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. {{msg}}{{1+1}}{{hello()}}<br />
  12. <span v-html="msg"></span>
  13. <br />
  14. <span v-text="msg"></span>
  15. </div>
  16. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  17. <script>
  18. new Vue({
  19. el: "#app",
  20. data: {
  21. msg: "<h1>Hello</h1>"
  22. },
  23. methods: {
  24. hello() {
  25. return "World"
  26. }
  27. }
  28. })
  29. </script>
  30. </body>
  31. </html>

2)v-bind

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <!-- 给html标签的属性绑定 -->
  11. <div id="app">
  12. <a v-bind:href="link">gogogo</a>
  13. <!-- class,style calss名:加上?-->
  14. <span v-bind:class="{active:isActive,'text-danger':hasError}"
  15. v-bind:style="{color: color1,fontSize: size}">你好</span>
  16. <span :class="{active:isActive,'text-danger':hasError}" :style="{color: color1,fontSize: size}">你好</span>
  17. </div>
  18. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  19. <script>
  20. new Vue({
  21. el: "#app",
  22. data: {
  23. link: "http://www.baidu.com",
  24. isActive: true,
  25. hasError: true,
  26. color1: 'green',
  27. size: '36px'
  28. }
  29. })
  30. </script>
  31. </body>
  32. </html>

3)v-model

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <!-- 表单项 自定义组件-->
  11. <div id="app">
  12. 精通的语言:
  13. <input type="checkbox" v-model="language" value="Java">java<br />
  14. <input type="checkbox" v-model="language" value="PHP">java<br />
  15. <input type="checkbox" v-model="language" value="Python">java<br />
  16. 选中了{{language.join(",")}}
  17. </div>
  18. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  19. <script>
  20. let vm = new Vue({
  21. el: "#app",
  22. data: {
  23. language: []
  24. }
  25. })
  26. </script>
  27. </body>
  28. </html>

4) v-on

基本用法:

事件修饰符:

在事件处理程序中调用`event.preventDefault()`或`event.stopPropagation()`是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理DOM事件细节。

为了解决这个问题,Vue.js为`v-on`提供了事件修饰符。修饰符是由点开点的指令后缀来表示 的。

`.stop`:阻止事件冒泡到父元素

`.prevent`:阻止默认事件发生

`.capture`:使用事件捕获模式

`.self`:只有元素自身触发事件才执行。(冒泡或捕获的都不执行)

`.once`:只执行一次

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <!--事件中直接写js片段-->
  12. <button v-on:click="num++">点赞</button>
  13. <!-- 事件指定一个回调函数,必须是Vue实例中定义的函数 -->
  14. <button v-on:click="cancle">取消</button>
  15. <!-- -->
  16. <h1>有{{num}}个赞</h1>
  17. <!-- 事件修饰符 -->
  18. <div style="border: 1px solid red;padding:20px;" v-on:click="hello">
  19. 大div
  20. <div style="border: 1px solid blue;padding: 20px" @click.stop="hello">
  21. 小div<br />
  22. <a href="http://www.baidu.com" @click.prevent.stop="hello">去百度</a>
  23. </div>
  24. </div>
  25. <!-- 按键修饰符: -->
  26. <input type="text" v-model="num" v-on:keyup.down="num-=2" v-on:keyup.up="num+=2" @click.ctrl="num=10"><br />
  27. </div>
  28. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  29. <script>
  30. new Vue({
  31. el: "#app",
  32. data: {
  33. num: 1
  34. },
  35. methods: {
  36. cancle() {
  37. this.num--
  38. },
  39. hello() {
  40. alert("点击 了");
  41. }
  42. }
  43. })
  44. </script>
  45. </body>
  46. </html>

5)v-for

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <ul>
  12. <li v-for="(user,index) in users" v-if="user.gender == '女'">
  13. 当前索引{{index}}=====>
  14. {{user.name}} ===> {{user.gender}} ====> {{user.age}}<br />
  15. 对象信息:
  16. <span v-for="(v,k,index) in user">|||||{{v}}===key={{k}}=====index={{index}}</span>
  17. <!-- 1、显示user信息: v-for="item in items" -->
  18. <!-- 2、获取数组下标: v-for="(item,index) in items" -->
  19. <!-- 3、遍历对象:
  20. v-for="value in object"
  21. v-for="(value,key)" in object
  22. v-for="(value,key,index) in object"
  23. -->
  24. <!-- 4、遍历时加上:key来区分不同数据,提高vue渲染效率 -->
  25. </li>
  26. <ul>
  27. <li v-for="(num,index) in nums" :key="index">{{num}}</li>
  28. </ul>
  29. </ul>
  30. </div>
  31. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  32. <script>
  33. let app = new Vue({
  34. el: "#app",
  35. data: {
  36. users: [{ name: '张三', gender: '男', age: 21 },
  37. { name: '李四', gender: '女', age: 22 },
  38. { name: '王五', gender: '男', age: 23 },
  39. { name: '赵六', gender: '女', age: 24 },
  40. ],
  41. nums: [1, 2, 3, 4, 4]
  42. }
  43. })
  44. </script>
  45. </body>
  46. </html>

6)v-if和v-show

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <!--
  11. v-if,顾名思义,条件判断。当得到结果为true时,所在的元素才会被渲染
  12. v-show,当得到的结果为true,所在的元素才会被显示
  13. -->
  14. <div id="app">
  15. <button v-on:click="show = !show">点我呀</button>
  16. <!-- 1、使用v-if显示 -->
  17. <h1 v-if="show">if=看到我。。。</h1>
  18. <!-- 2、使用v-show显示 -->
  19. <h1 v-show="show">show=看到我</h1>
  20. </div>
  21. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  22. <script>
  23. let app = new Vue({
  24. el: "#app",
  25. data: {
  26. show: true
  27. }
  28. })
  29. </script>
  30. </body>
  31. </html>

7)v-else和v-else-if

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <button v-on:click="random=Math.random()">点我呀</button>
  12. <span>{{random}}</span>
  13. <h1 v-if="random >= 0.75">
  14. 看到我了?!&gt;=0.75
  15. </h1>
  16. <h1 v-else-if="random >= 0.5">
  17. 看到我了?!&gt;=0.5
  18. </h1>
  19. <h1 v-else-if="random >= 0.2">
  20. 看到我了?!&gt;=0.2
  21. </h1>
  22. <h1 v-else>
  23. 看到我了?!&gt;0.2
  24. </h1>
  25. </div>
  26. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  27. <script>
  28. let app = new Vue({
  29. el: "#app",
  30. data: { random: 0.3 }
  31. })
  32. </script>
  33. </body>
  34. </html>

6、计算属性和侦听器

1)计算属性和侦听器

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <!-- 某些结果是基于之前数据实时计算出来的,我们可以利用计算属性来完成 -->
  12. <ul>
  13. <li>西游记;价格:{{xyjPrice}},数量:<input type="number" v-model="xyjNum"></li>
  14. <li>水浒传;价格:{{shzPrice}},数量:<input type="number" v-model="shzNum"></li>
  15. <li>总价:{{totalPrice}}</li>
  16. </ul>
  17. {{msg}}
  18. </div>
  19. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  20. <script>
  21. // watch可以让我们监控一个值的变化 ,从而做出相应的反应
  22. new Vue({
  23. el: "#app",
  24. data: {
  25. xyjPrice: 99.98,
  26. shzPrice: 98.00,
  27. xyjNum: 1,
  28. shzNum: 1,
  29. msg: ""
  30. },
  31. computed: {
  32. totalPrice() {
  33. return this.xyjPrice * this.xyjNum + this.shzPrice * this.shzNum
  34. }
  35. },
  36. watch: {
  37. xyjNum: function (newVal, oldVal) {
  38. //alert("newVal" + newVal + "====>oldVal" + oldVal)
  39. if (newVal >= 3) {
  40. this.msg = "库存超出限制",
  41. this.xyjNum = 3
  42. } else {
  43. this.msg = ""
  44. }
  45. }
  46. }
  47. })
  48. </script>
  49. </body>
  50. </html>

2)过滤器

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <!-- 过滤器常用来处理文本格式化的操作。过滤器可以用在两个地方:双花括号插值和v-bind表达式 -->
  11. <div id="app">
  12. <ul>
  13. <li v-for="user in userList">
  14. {{user.id}} ==> {{user.name}}==>{{user.gender == 1 ? "男":"女"}} ===> {{user.gender | genderFilter}}
  15. ====> {{user.gender | genderFilter}}====> {{user.gender | gFilter}}
  16. </li>
  17. </ul>
  18. </div>
  19. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  20. <script>
  21. Vue.filter("gFilter", function (val) {
  22. if (val == 1) {
  23. return "男~~~";
  24. } else {
  25. return "女~~~";
  26. }
  27. })
  28. let vm = new Vue({
  29. el: "#app",
  30. data: {
  31. userList: [
  32. { id: 1, name: 'jacky', gender: 1 },
  33. { id: 2, name: 'peter', gender: 0 }
  34. ]
  35. },
  36. filters: {
  37. genderFilter(val) {
  38. if (val == 1) {
  39. return "男";
  40. } else {
  41. return "女";
  42. }
  43. }
  44. }
  45. })
  46. </script>
  47. </body>
  48. </html>

7、组件化

在vue里,所有实例都是组件

组件其实也是一个Vue实例,因此它在定义时也会接收:data、methods、生命周期函数等

不同的是组件不会与页面的元素绑定,否则就无法利用了,因此没有el属性

但是组件渲染需要html模板,所以增加了template属性,值就是HTML模板

全局组件定义完毕,任何vue实例都可以直接在HTML中通过组件名称来使用组件了

data必须是一个函数,不再是一个对象

1)全局组件

2)组件的利用

3)局部组件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <button @click="count++">我被点击了{{count}}次</button>
  12. <counter></counter>
  13. <counter></counter>
  14. <counter></counter>
  15. <br />
  16. <button-counter></button-counter>
  17. </div>
  18. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  19. <script>
  20. //1、全局声明注册一个组件
  21. Vue.component("counter", {
  22. template: `<button @click="count++">我被点击了{{count}}次</button>`,
  23. data() {
  24. return {
  25. count: 1
  26. }
  27. }
  28. });
  29. //2、局部声明一个组件
  30. const buttonCounter = {
  31. template: `<button @click="count++">我被点击了{{count}}次</button>`,
  32. data() {
  33. return {
  34. count: 1
  35. }
  36. }
  37. };
  38. new Vue({
  39. el: "#app",
  40. data: {
  41. count: 1
  42. },
  43. components: {
  44. 'button-counter': buttonCounter
  45. }
  46. })
  47. </script>
  48. </body>
  49. </html>

8、生命周期构子函数

1、生命周期

每个Vue实例在被创建时都要经过一系列的初始化过程:创建实例,装载模板,渲染模板等等。Vue为生命周期中的每个状态都设置了钩子函数(监听函数)。每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用。

生命周期

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <span id="num">{{num}}</span>
  12. <button @click="num++">赞!</button>
  13. <h2>{{name}},有{{num}}个人点赞</h2>
  14. </div>
  15. <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
  16. <script>
  17. let app = new Vue({
  18. el: "#app",
  19. data: {
  20. name: "张三",
  21. num: 100
  22. },
  23. methods: {
  24. show() {
  25. return this.name;
  26. },
  27. add() {
  28. this.num++;
  29. }
  30. },
  31. beforeCreate() {
  32. console.log("===============beforeCreate创建前===============");
  33. console.log("数据模型未加载:" + this.name, this.num);
  34. console.log("方法未加载:" + this.show());
  35. console.log("html模型未加载:" + document.getElementById("num"));
  36. },
  37. created: function () {
  38. console.log("===============created创建===============");
  39. console.log("数据模型已加载:" + this.name, this.num);
  40. console.log("方法已加载:" + this.show());
  41. console.log("html模型已加载:" + document.getElementById("num"));
  42. console.log("html模型未渲染:" + document.getElementById("num").innerText);
  43. },
  44. beforeMount() {
  45. console.log("===============beforeMount挂载前===============");
  46. console.log("html模板未渲染:" + document.getElementById("num").innerText);
  47. },
  48. mounted() {
  49. console.log("===============mounted挂载===============");
  50. console.log("html模板已渲染:" + document.getElementById("num".innerText))
  51. },
  52. beforeUpdate() {
  53. console.log("===============beforeUpdate更新前===============");
  54. console.log("数据模板已更新:" + this.num);
  55. console.log("html模板未更新:" + document.getElementById("num").innerText);
  56. },
  57. updated() {
  58. console.log("===============updated更新===============");
  59. console.log("数据模板已更新:" + this.num);
  60. console.log("html模板已更新:" + document.getElementById("num").innerText);
  61. }
  62. })
  63. </script>
  64. </body>
  65. </html>

9、vue模块化开发

1、全局安装

创建vue-demo文件夹,在文件夹下进入终端,输入

npm install sebpack -g

2、全局安装vue脚手架

npm install -g @vue/cli-init

3、初始化vue项目

vue init webpack appname:vue脚手架使用 webpack模板初始化一个appname项目

4、启动vue项目

在项目根目录下,终端输入npm run dev

目录

components:组件存放目录

src:vue页面文件存放目录

router:路由文件存放目录

package.json        依赖

index.html:首页

router ---->  App.vue        全局

router ---->  main.js        导入组件的地方

了解使用组件,在components中创建一个Hello.vue组件,在router --> index.js中

导入组件        import Hello from '@/components/Hello'

添加路由        在routes中添加

{

      path: '/hello',

      name: 'Hello',

      component: Hello

    }

在App.vue添加动态路由

<router-link to="/hello">去Hello</router-link>

    <router-link to="/">去首页</router-link>

10、Element-ui快速上手

Vue整合element-ui

安装,在项目根目录下, npm i element-ui

完整引入,在main.js中添加

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

// 设备为全局

Vue.use(ElementUI);

测试:

在Hello.vue文件中添加

<el-radio v-model="radio" label="1">备选项</el-radio>

    <el-radio v-model="radio" label="2">备选项</el-radio>

添加Container布局容器

在App.vue的代码中,在element-ui官网中找到Element-ui的Container的内容,然后复制粘贴到App.vue文件中

将选项一修改为用户列表,选项二修改为Hello

将<el-main>里的内容注释掉,添加<router-view></touter-view>

在components中创建MyTable.vue文件,然后输入vue回车

将上面注释掉的内容添加到MyTable.vue中

将vue.vue里的data数据添加到MyTable.vue中

在index.js中添加MyTable.vue导入信息并添加路径信息

这里有个坑,需要将MyTable的script的sass去掉

在Vue.vue里配置路由跳转

在el-menu里添加 router="true" ,将跳转模式切换成路由

在用户列表的Index的值修改为/table

在Hello列表的Index的值修改为/hello

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/76718
推荐阅读
相关标签
  

闽ICP备14008679号