第三阶段-day7-8_Vue

Vue

day7第五节课开始

1.1 工程化的创建一个Vue项目

1.1.1 第一步

安装node

 

检测是否安装成功

Node -v

Npm -v

 

1.1.2 第二步

 

 

 一个项目可能要下千百万个包,npm服务器上下载,有墙,非常慢,去cnpm(镜像)上下载。

 

 

安装cnpm   阿里开发的

npm install -g cnpm --registry=https://registry.npm.taobao.org

 

npm: 命令标识

Install:  安装

-g:  全局安装(两个问题:  第一个,不要直接复制ppt中的代码运行,有隐藏字符,可在nodepad中转换一下;  全局:  )

Cnpm:  要安装的包

--registry=https://registry.npm.taobao.org:  从那获得这个包

 

Cnpm -v

 

 已经安装过了就不要再安装了。

 

cnpm -v //查看版本

 

 

1.1.3 第三步: vue-cli

安装脚手架工具(vue-cli:  它可以帮助我们快速构建一个vue项目)

  •  cnpm install -g @vue/cli
  •  cnpm install -g @vue/cli-init
  •  vue –V (v必须大写) 判断有没有安装成功

 

1.1.4 第四步: webpack

模块打包

cnpm install -g webpack   

1.1.5 创建项目

想在那个地址创建项目就在那个路径下敲代码。

Vue init webpack 项目名

 

 此时,桌面上新建了一个vue1项目文件夹

 

 刚才拒绝了npm装包,

 

 

 

1.1.6 启动项目

Npm run dev

 

 

 

 

 

1.1.7 注意

1.1.7.1 注意1:

永远不要直接关命令行窗口, 要保证没有东西在运行

出问题,报错找老师。

1.1.7.2 注意2

注意电脑:  规范操作

 

1.1.7.3 Cnpm以及包的时候出错

1.1.7.3.1 第一种: 黑白色大段刷屏错误

怎么办等一下等个3-5分钟, 如果还是错误 ctrl+c Y

重新执行 ---不行(删除原有包)

 

1.1.7.3.2 第二种: 红色的error

放弃幻想: (删除原有包)重装( 全局和局部)

 

1.1.7.3.3 第三种: 流在写会前被中断

麻烦: (删除原有包) 重装包,  重启电脑关闭所有程序, 重新执行

 

1.1.7.4 全局安装和局部

命令中加 -g:  就是全局安装(安装到那去了)

 

局部安装 不加-g的装包命令: 命令行在哪个路径下,包就装到哪   cnpm install

 

1.1.7.5 注意:

 

如果出现这种情况,不用care,忽略。

1.1.7.6 一直在下载模板

结束命令看一下以前装的webpack有没有成功

 

1.1.7.7 如果卡住,

先等一下5-6

不动结束命令  重新执行刚才的命令

 

1.1.7.8 项目名: 不要大写

 

 day8

1.2 重复创建项目: 从哪一步

Vue init  webpack 项目名

 

1.3 复制项目: 不要直接复制

因为300多万个文件,错一个比特位,项目就启动不起来了。而300w的文件,复制出错的概率,非常大。∴不要直接复制。如果实在想复制:

复制除了node_modules, 之外的文件

 

复制完成之后, cnpm install,可以简写为cnpm i

 

1.4 目录不一样

没关系, 因为创建项目时的问题选的y/n问题回答不一样。没关系的。

Npm run dev 能不能启动,能启动就行。

 

1.5 启动: 关闭

Npm run dev    启动

ctrl+c 或ctrl+y  关闭

服务最重要的特点:  监听端口分析请求, 返回内容

 

1.6 分析一下目录结构

 

 不需要全部都关注。

只需要关注以下需要用到的文件

1.6.1 默认端口

 

 如果配置的是8080,

Npm  run dev启动后不是8080 ,是8081或8082等,一般是端口占用

 

1.6.2 关于打包: mac注意

两种打包方式: 

1.windows

2.liux,mac(mac 抄袭自liux,但它不承认,∴他两命令一样)

打包时,命令都是一样的:

npm run build

 

但是,要改配置,index.js文件——> assetsPublicPath

如果是windows,那不用管,默认就可以

如果是mac/liux,加个.

 

 

 

1.6.3 代理

 

代理,我们一般访问服务器就是浏览器向服务器发送请求,服务器响应浏览器。
有时候不能直接访问服务器,就先访问别的地方,让这个地方访问服务器。

前端有个问题:跨域? (不允许两个不同的ip或者端口请求, 在同一个页面产生)
这是浏览器的一种同源策略,否则会有安全问题。

但是我们想让浏览器实现这种功能。根据前后端分离这张图我们知道,只有浏览器得有两个请求,一次请求前端的页面,一次请求后端的数据。

 

 

 

 

 

两种跨域(通用)的解决办法?  1.后端做处理;2.代理

刚开始得页面从8085(前端服务器)来的,我想要获取数据,得去8084(后端服务器)获取,但是浏览器不允许啊,那我就还去8085获取,8085做代理,发请求给8084,获取数据之后再返回给浏览器。

 

如果你的IDEA打不开前端项目,可以试着把.idea文件删除,然后再打开。
主要原因是你给IDEA设置的内存太小了,因为node_modules这个文件很大,IDEA是需要建立索引才能打开的(IDEA打开java项目也是),索引建立失败就打不开了。
对于java项目也是这样。

package.json

 1 {
 2   "name": "vuetest",
 3   "version": "1.0.0",
 4   "description": "A Vue.js project",
 5   "author": "liushihao <2592693386@qq.com>",
 6   "private": true,
 7   "scripts": {
 8     "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
 9     "start": "npm run dev",
10     //打包命令:npm run build
11     "build": "node build/build.js"
12   },
13   //cnpm install就是装包,根据的就是以下内容装,左边表示包名,右边表示版本号。
14   //node_modules就是根据这些内容下载的包
15   //"dependencies"(打包版)表示项目真正打包的时候依赖的包
16   "dependencies": {
17     "vue": "^2.5.2"
18   },
19   //"devDependencies"(开发版)npm run dev启动的就是开发版的
20   //我们程序员在开发的时候用到的包
21   "devDependencies": {
22     "autoprefixer": "^7.1.2",
23     "babel-core": "^6.22.1",
24     "babel-helper-vue-jsx-merge-props": "^2.0.3",
25     "babel-loader": "^7.1.1",
26     "babel-plugin-syntax-jsx": "^6.18.0",
27     "babel-plugin-transform-runtime": "^6.22.0",
28     "babel-plugin-transform-vue-jsx": "^3.5.0",
29     "babel-preset-env": "^1.3.2",
30     "babel-preset-stage-2": "^6.22.0",
31     "chalk": "^2.0.1",
32     "copy-webpack-plugin": "^4.0.1",
33     "css-loader": "^0.28.0",
34     "extract-text-webpack-plugin": "^3.0.0",
35     "file-loader": "^1.1.4",
36     "friendly-errors-webpack-plugin": "^1.6.1",
37     "html-webpack-plugin": "^2.30.1",
38     "node-notifier": "^5.1.2",
39     "optimize-css-assets-webpack-plugin": "^3.2.0",
40     "ora": "^1.2.0",
41     "portfinder": "^1.0.13",
42     "postcss-import": "^11.0.0",
43     "postcss-loader": "^2.0.8",
44     "postcss-url": "^7.2.1",
45     "rimraf": "^2.6.0",
46     "semver": "^5.3.0",
47     "shelljs": "^0.7.6",
48     "uglifyjs-webpack-plugin": "^1.1.1",
49     "url-loader": "^0.5.8",
50     "vue-loader": "^13.3.0",
51     "vue-style-loader": "^3.0.1",
52     "vue-template-compiler": "^2.5.2",
53     "webpack": "^3.6.0",
54     "webpack-bundle-analyzer": "^2.9.0",
55     "webpack-dev-server": "^2.9.1",
56     "webpack-merge": "^4.1.0"
57   },
58   "engines": {
59     "node": ">= 6.0.0",
60     "npm": ">= 3.0.0"
61   },
62   "browserslist": [
63     "> 1%",
64     "last 2 versions",
65     "not ie <= 8"
66   ]
67 }

 

 Index.html是入口文件,整个项目就是从这个文件进入的。
你写的java代码的入口在main方法。

 再看src目录下的main.js文件:

 1 // The Vue build version to load with the `import` command
 2 // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
 3 import Vue from 'vue'
 4 import App from './App'
 5 
 6 Vue.config.productionTip = false
 7 
 8 /* eslint-disable no-new */
 9 new Vue({
10   el: '#app',
11   components: { App },
12   template: '<App/>'
13 })
14 
15 //这就是我们之前讲的用Vue对象操作html页面。
16 //Vue对象中的模板会替换挂载的元素,模板从子组件App中来,App是从import App from './App'导入的,指的就是同级目录下的App.vue,也就是说,把App.vue当成一个子组件导入到入口对象中使用。
17 
18 App.vue:
19 <template>
20   <div id="app">
21     <img src="./assets/logo.png">
22     //默认是这样写的<HelloWorld/>,但我们应当是下一行代码的写法,原因在组件的         //大小写中讲过,这个HelloWorld是下面对象中的子组件,这个HelloWorld从哪来呢
23     //import HelloWorld from './components/HelloWorld' 从这里来
24 <hello-world/>
25   </div>
26 </template>
27 
28 <script>
29 import HelloWorld from './components/HelloWorld'
30 
31 //上面的template模板是下面对象的模板,相当于对象中有个template属性一样。
32 //它本身是一个对象,经过main.js中入口对象(new Vue)的引用components: { App }
33 //之后称为了Vue对象,成为一个子组件,从而具有了实际意义。
34 //export default默认导出,也就是说,App.vue对外界输出的默认就是这个对象
35 //也就是说,main.js中import App from './App'实际导入的就是一个对象
36 export default {
37   name: 'App',
38   components: {
39     HelloWorld
40   }
41 }
42 </script>
43 
44 <style>
45 #app {
46   font-family: 'Avenir', Helvetica, Arial, sans-serif;
47   -webkit-font-smoothing: antialiased;
48   -moz-osx-font-smoothing: grayscale;
49   text-align: center;
50   color: #2c3e50;
51   margin-top: 60px;
52 }
53 </style>

HelloWorld.vue

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
    <ul>
      <li>
        <a
          href="https://vuejs.org"
          target="_blank"
        >
          Core Docs
        </a>
      </li>
      <li>
        <a
          href="https://forum.vuejs.org"
          target="_blank"
        >
          Forum
        </a>
      </li>
      <li>
        <a
          href="https://chat.vuejs.org"
          target="_blank"
        >
          Community Chat
        </a>
      </li>
      <li>
        <a
          href="https://twitter.com/vuejs"
          target="_blank"
        >
          Twitter
        </a>
      </li>
      <br>
      <li>
        <a
          href="http://vuejs-templates.github.io/webpack/"
          target="_blank"
        >
          Docs for This Template
        </a>
      </li>
    </ul>
    <h2>Ecosystem</h2>
    <ul>
      <li>
        <a
          href="http://router.vuejs.org/"
          target="_blank"
        >
          vue-router
        </a>
      </li>
      <li>
        <a
          href="http://vuex.vuejs.org/"
          target="_blank"
        >
          vuex
        </a>
      </li>
      <li>
        <a
          href="http://vue-loader.vuejs.org/"
          target="_blank"
        >
          vue-loader
        </a>
      </li>
      <li>
        <a
          href="https://github.com/vuejs/awesome-vue"
          target="_blank"
        >
          awesome-vue
        </a>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
//data域换了个写法而已,其实本质上和之前学的data:{}这种写法没啥区别
//methods写法不变,除了data写法不一样,其他属性的写法都和之前一样
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
  font-weight: normal;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

 

1.7 Idea安装插件--vue

 

 这样,在src目录下才可以new 出 vue 文件

 

 

 得到一个vue文件

 

 如果vue文件里面没内容,创建文件new-->file--aaa.vue,看文件有没有显示vue图标

 

 如果没显示vue图标,进入一下两个地方看看

 

 

 

 

 

 

 

版本1:

写一个和css中Homework1一样的页面,左边有链接,右边显示网页。
那么就用到两个子组件:Left.vue和Right.vue。
index.html中是代码的入口。main.js是第父组件,其中导入了第二级子组件App.vue,
第二级子组件App.vue中导入第三级子组件:Left.vue和Right.vue,第三级自组件中导入第四级子组件:Right1.vue、Right2.vue、Right3.vue
所以我们只需要在App.vue、Left.vue和Right.vue和Right1.vue、Right2.vue、Right3.vue中写代码就好了。

 

 

 App.vue

 1 <template>
 2   <div id="app">
 3     <!--父组件监听change-->
 4     <left class="left" @change="change"></left>
 5     <!--用tag通知子组件,向下传值-->
 6     <right class="right" v-bind:tag="tag"></right>
 7   </div>
 8 </template>
 9 
10 <script>
11   //导入
12   import Left from './components/Left'
13   import Right from './components/Right'
14 
15   export default {
16     name: 'App',
17     components: {
18       //注册
19       Left,
20       Right
21     },
22     data() {
23       return {
24         tag: 0
25       }
26     },
27     methods: {
28       change: function (parm) {
29         //tag是随着点击的变化而变化
30         this.tag = parm
31       }
32     }
33   }
34 </script>
35 
36 <style>
37   .left {
38     float: left;
39     width: 100px;
40     height: 400px;
41     padding: 20px;
42     border: 1px solid silver;
43     margin: 30px 0px 0px 30px;
44   }
45 
46   .right {
47     float: left;
48     width: 700px;
49     height: 500px;
50     border: 1px solid silver;
51     margin: 30px 0px 0px 30px;
52   }
53 </style>

Left.vue

<template>
  <div>
    <!--左组件有个click方法,点击后右组件就能跳转到对应的页面-->
    <!--应当怎么实现呢?左组件和右组件是同级关系,没法直接实现-->
    <!--先让左组件向上传值给父组件,再让父组件向下传值给右组件-->
    <div class="left-div" @click="click1(1)">首页</div>
    <div class="left-div" @click="click1(2)">百度</div>
    <div class="left-div" @click="click1(3)">淘宝</div>
  </div>
</template>
<!--现在我们想实现css中Homework1的页面,左边链接,右边能显示百度和淘宝首页的功能-->
<script>
  export default {
    name: "Left",
    methods: {
      click1: function (parm) {
        this.$emit('change', parm)
      }
    }
  }
</script>

<style scoped>
  .left-div {
    height: 30px;
    line-height: 30px;
    border-bottom: 1px solid silver;
  }
</style>

 

Right.vue

<template>
  <!--这是最顶端的div-->
  <div>
    <!--将Right又细分成了3个子组件Right1、Right2、Right3-->
    <Right1 v-if="tag==1" class="right-div"></Right1>
    <!--class="right-div"的div占据父div的100%,class="iframe1"的iframe占据class="right-div"的div的100%-->
    <Right2 v-else-if="tag==2" class="right-div"></Right2>
    <Right3 v-else="tag==3" class="right-div"></Right3>
  </div>
</template>

<script>
  import Right1 from './Right/Right1'
  import Right2 from './Right/Right2'
  import Right3 from './Right/Right3'

  export default {
    name: "Right",
    props: ['tag'],
    components: {
      Right1,
      Right2,
      Right3
    }
  }
</script>

<style scoped>
  .right-div {
    width: 100%;
    height: 100%;
    background: aqua;
  }
</style>

Right1.vue

<template>
  <div>
    首页
  </div>
</template>

<script>
  export default {
    name: "Right1"
  }
</script>

<style scoped>

</style>

 

Right2.vue

<template>
  <div>
    <iframe class="iframe1" src="https://baidu.com"></iframe>
  </div>
</template>

<script>
  export default {
    name: "Right2"
  }
</script>

<style scoped>
  .iframe1 {
    width: 100%;
    height: 100%;
  }
</style>

Right.vue

<template>
  <div>
    <iframe class="iframe1" src="https://taobao.com"></iframe>
  </div>
</template>

<script>
  export default {
    name: "Right3"
  }
</script>

<style scoped>
  .iframe1 {
    width: 100%;
    height: 100%;
  }
</style>

注:不能这样打开刚刚写的项目

 

 

 

之前能这样打开是因为我们创建的是一个java项目,只不过在java项目里写了一些html代码。
现在IDEA对Vue项目来说只是充当了一个编辑器的作用,就像Notepad++似的。

现在启动项目,要在命令行中cmd,项目目录下…/vue, 启动项目:npm run dev

刚刚的项目主要讲了两个问题:
1.组件嵌套
2.Left和right组件之间的交互(组件间传值)

-----------------------------------------------------------------------------------------------------

版本2

试想一下,如果嵌套层次较深,就要多级传值,可以实现,但是牵连的对象太多,万一哪一步出错,就完犊子了。

所以,直接交互(父子之间交互)的话可以用组价间传值,非直接交互就用中央总线事务。

1.8 中央总线事务

直接交互,子组件和父组件直接传,可以,

如果是多级传值,有3,4层,一层一层地传值,12层传,在23层传,再34层传,不行。太麻烦了,如果中间有那一层出错了,整个就崩溃了。

∴中央总线传值。

 

Vuex: 主要用来存储数据

 

总线计算机硬件(cpu 内存外存, ), 

 

 我们想让Vue对象也像这样,分布在一条“线”上,彼此之间可以相互交互。

这条“线”其实也是Vue对象,其他对象都可以与这个对象进行交互。

先有接收方: 监听动作
监听当然是,对象刚创建好就要监听,这就用到了生命周期函数。
再有触发方: 触发的动作

Bus:   公交车

先有接收方:   监听动作

再有触发方:   触发的动作

----------------------------------------------------------------------------------------------------- 

版本3:
我们在Left.vue和Right.vue中都导入了bus目录下的index.js,即:
import Bus from “…/bus”
试想一下,如果总线上有很多对象,那每个对象都要:import Bus from "…/bus"么?
为了避免这样做,有了版本3:

 

 Vue对象、包、插件(轮子)的使用流程:

分三步: 导入到项目

1, 下包(导包), 导入文件,

2, 在项目中配置,引入到项目 (99.9%都是导入到main.js里)

3, 使用

落实到我们版本3的项目中,就是这三步:
1.创建bus目录下的index.js文件
2.在main.js中导入index.js
3.使用

 

 

 

 开发模式(dev)启动时访问

Package.json -> dev

–host 0.0.0.0,

即把dev属性改成这样:

“dev”: “webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js”,

 

我把我的ip告诉你,你访问我的ip+8080端口号依然访问不到,两个原因:

1.我的ip地址不是公网ip

2.即使是公网ip,我是开发模式启动,你依然无法访问

如果想让别人访问,我还是公网ip,就加个–host 0.0.0.0就成

还有一种情况,另一台电脑和你在一个局域网,那你加个–host 0.0.0.0,另一台电脑就可访问你,浏览器输入http://192.168.xxx.xxx:8080/。

 

1.9 Json

是一种数据格式:  用来传输数据,键值对的形式存储数据。

Xml:  也用来数据传输(以前用xml,现在90%公司用json传输数据)

 版本4:

加入Json这种数据格式,来看一下效果:

//啥时候从后台取数据来着?Vue对象创建或挂载的时候

//获取json数据,拿来直接用,java可以利用jar包对Jason数据做一个转换,转化成java对象

//你就能拿来操作

//这就是前后端分离那幅图中的两个过程:

//1.浏览器向后端服务器发送请求

//2.后端服务器返回数据给浏览器

 

什么是json

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

JSON 是轻量级的文本数据交换格式

JSON 独立于语言

JSON 具有自我描述性,更易理解

JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

 

回忆一下网络三要素: 1.Html,用来描述资源 2.http(协议),用来确定资源的传输方式 3.Url,用来指示资源

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

 

用json来承载数据,传输数据的方式是http协议

 

1.10 接口文档

提供一个文档: 描述一个接口

 

接口:  

url: 三部分第三部分给服务器看的

 

url: 协议部分、IP地址+端口号部分、第三部分是主机资源的具体地址。如目录和文件名等。: 是给服务器看的。

第三部分必须匹配接口,才能进入服务器,进行访问。

前端和后端交互,主要就是利用接口

 

1.11 Axios包

我们现在还不知道如何从后台获取数据。 Axios包就可以帮助我们实现第二次请求:浏览器向后端服务器请求数据。

Vue对象、包、插件(轮子)的使用流程:

分三步: 导入到项目
1, 下载包(导包), 导入文件,
2, 在项目中配置,引入到项目
3, 使用

1.装包: 

cnpm install axios --save

–save:将保存配置信息到pacjage.json。默认为dependencies节点中。
–dev:将保存配置信息devDependencies节点中。
因此:
–save:将保存配置信息到pacjage.json的dependencies节点中。
–save-dev:将保存配置信息到pacjage.json的devDependencies节点中。
dependencies:运行时的依赖,发布后,即生产环境下还需要用的模块
devDependencies:开发时的依赖。里面的模块是开发时用的,发布时用不到它。

2.导入引入到项目中去,main.js文件中

import axios from 'axios'
Vue.prototype.$axios = axios

修改mian.js一定要重启。(在cmd命令行中,进入项目目录下…/vue4,  启动项目:nmp run dev)

3.使用

//对象创建完之后,向后端发送请求,请求数据。
created() {
  var _this = this
  //发送一个get请求,请求java后台传数据
  //then表示请求成功返回一个东西,把res.data.data返回给obj
  //catch表示如果请求不成功
  this.$axios.get('http://115.29.141.32:8084/api/mall/getGoodsByType?typeId=-1')
    .then(res => {
      console.log(res)
      //不能用this,因为this现在指代的是这个方法
      //res.data返回的是一个axios封装的返回值
      //我们实际封装的返回值在res.data.data里
      _this.obj = res.data.data
    })
    .catch(error => {
      console.log(error)
    })
}

 

买买买商城的ip地址

http://115.29.141.32:8085/#/mall/show/index

 

http://115.29.141.32:8084/api/mall/getGoodsByType?typeId=-1

 

补充

2.1 前端

轮子

前端组件化的天下, .

 

2.2 Element-ui

 

npm i element-ui -S
其实就相当于:
Cnpm install element-ui --save

如何使用?依然是安装轮子的三步,我们用版本5做演示
1.创建好项目vue5之后,cmd命令行输入:Cnpm install element-ui --save,下载包
2.导包
在main.js中输入这几行代码:
import ElementUI from ‘element-ui’;
import ‘element-ui/lib/theme-chalk/index.css’;

Vue.use(ElementUI);

3.使用。
我们在Element-ui这个网站上找一个现成的代码,放到App.vue中。
npm run dev

https://iview.github.io/docs/guide/introduce
这是另一个ui网站

 

 

 

2.3 Iconfont

阿里矢量图库 :https://www.iconfont.cn/home/index
矢量图:放大后不会走形的图

 

 有怎么在项目中用

 

 作业

1, 把今天上课代码好好写一下

2, 实现一个导航点击改变页面的vue页面(在项目中), 要求显示一些向后端请求的数据(参考最后一节提示)

重点

前后端分离的项目一个页面是怎么产生的

结合axios

想明白

网址

http://115.29.141.32:8085/#/mall/show/index

 账号:admin  密码:admin

https://iview.github.io/   组件网站

 

https://www.iconfont.cn/   矢量图

 

http://www.googlefonts.cn/   各种字体

 

https://v-charts.js.org/#/funnel   各种表、环图,比例图

 

https://element.eleme.cn/#/zh-CN/component/layout

 

开发模式(dev)启动时访问Package.json -> dev–host 0.0.0.0,即把dev属性改成这样:“dev”: “webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js”,
我把我的ip告诉你,你访问我的ip+8080端口号依然访问不到,两个原因:1.我的ip地址不是公网ip2.即使是公网ip,我是开发模式启动,你依然无法访问如果想让别人访问,我还是公网ip,就加个–host 0.0.0.0就成还有一种情况,另一台电脑和你在一个局域网,那你加个–host 0.0.0.0,另一台电脑就可访问你,浏览器输入http://192.168.xxx.xxx:8080/。
1.9Json 是一种数据格式: 用来传输数据 可以查看一下Vue3项目下的package.json文件: { }外面是一个json对象,里面是键值对{  "name": "vue3",  "version": "1.0.0",  "description": "A Vue.js project",  "author": "liushihao <2592693386@qq.com>",  "private": true,  "scripts": {    "dev": "webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js",    "start": "npm run dev",    "build": "node build/build.js"  },  "dependencies": {    "vue": "^2.5.2"  },  "devDependencies": {    "autoprefixer": "^7.1.2",    "babel-core": "^6.22.1",    "babel-helper-vue-jsx-merge-props": "^2.0.3",    "babel-loader": "^7.1.1",    "babel-plugin-syntax-jsx": "^6.18.0",    "babel-plugin-transform-runtime": "^6.22.0",    "babel-plugin-transform-vue-jsx": "^3.5.0",    "babel-preset-env": "^1.3.2",    "babel-preset-stage-2": "^6.22.0",    "chalk": "^2.0.1",    "copy-webpack-plugin": "^4.0.1",    "css-loader": "^0.28.0",    "extract-text-webpack-plugin": "^3.0.0",    "file-loader": "^1.1.4",    "friendly-errors-webpack-plugin": "^1.6.1",    "html-webpack-plugin": "^2.30.1",    "node-notifier": "^5.1.2",    "optimize-css-assets-webpack-plugin": "^3.2.0",    "ora": "^1.2.0",    "portfinder": "^1.0.13",    "postcss-import": "^11.0.0",    "postcss-loader": "^2.0.8",    "postcss-url": "^7.2.1",    "rimraf": "^2.6.0",    "semver": "^5.3.0",    "shelljs": "^0.7.6",    "uglifyjs-webpack-plugin": "^1.1.1",    "url-loader": "^0.5.8",    "vue-loader": "^13.3.0",    "vue-style-loader": "^3.0.1",    "vue-template-compiler": "^2.5.2",    "webpack": "^3.6.0",    "webpack-bundle-analyzer": "^2.9.0",    "webpack-dev-server": "^2.9.1",    "webpack-merge": "^4.1.0"  },  "engines": {    "node": ">= 6.0.0",    "npm": ">= 3.0.0"  },  "browserslist": [    "> 1%",    "last 2 versions",    "not ie <= 8"  ]}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061Xml: 也用来数据传输越来越多的公司用json传输数据,而不用xml
版本4:加入Json这种数据格式,来看一下效果://啥时候从后台取数据来着?Vue对象创建或挂载的时候//获取json数据,拿来直接用,java可以利用jar包对Jason数据做一个转换,转化成java对象//你就能拿来操作//这就是前后端分离那幅图中的两个过程://1.浏览器向后端服务器发送请求//2.后端服务器返回数据给浏览器
什么是jsonJSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)JSON 是轻量级的文本数据交换格式JSON 独立于语言JSON 具有自我描述性,更易理解JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
回忆一下网络三要素: 1.Html,用来描述资源 2.http(协议),用来确定资源的传输方式 3.Url,用来指示资源HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
用json来承载数据,传输数据的方式是http协议1.10接口文档提供一个文档: 描述一个接口
接口:url: 协议部分、IP地址+端口号部分、第三部分是主机资源的具体地址。如目录和文件名等。: 是给服务器看的。第三部分必须匹配接口,才能进入服务器,进行访问。前端和后端交互,主要就是利用接口
1.11Axios包 我们现在还不知道如何从后台获取数据。 Axios包就可以帮助我们实现第二次请求:浏览器向后端服务器请求数据。Vue对象、包、插件(轮子)的使用流程:分三步: 导入到项目1, 下包(导包), 导入文件,2, 在项目中配置,引入到项目3, 使用
1.装包: cnpm install axios --save–save:将保存配置信息到pacjage.json。默认为dependencies节点中。–dev:将保存配置信息devDependencies节点中。因此:–save:将保存配置信息到pacjage.json的dependencies节点中。–save-dev:将保存配置信息到pacjage.json的devDependencies节点中。dependencies:运行时的依赖,发布后,即生产环境下还需要用的模块devDependencies:开发时的依赖。里面的模块是开发时用的,发布时用不到它。
2.导入: 引入到项目中去:在main.js文件中:import axios from ‘axios’Vue.prototype.$axios = axios
3.使用
//对象创建完之后,向后端发送请求,请求数据。created() {  var _this = this  //发送一个get请求,请求java后台传数据  //then表示请求成功返回一个东西,把res.data.data返回给obj  //catch表示如果请求不成功  this.$axios.get('http://115.29.141.32:8084/api/mall/getGoodsByType?typeId=-1')    .then(res => {      console.log(res)      //不能用this,因为this现在指代的是这个方法      //res.data返回的是一个axios封装的返回值      //我们实际封装的返回值在res.data.data里      _this.obj = res.data.data    })    .catch(error => {      console.log(error)    })}1234567891011121314151617182补充2.1前端学会用轮子:前端: 组件化的天下
版本5
2.2Element-ui接下来我们进入element-ui这个网站:https://element.eleme.cn/#/zh-CN/component/installation
npm i element-ui -S其实就相当于:Cnpm install element-ui --save
如何使用?依然是安装轮子的三步,我们用版本5做演示1.创建好项目vue5之后,cmd命令行输入:Cnpm install element-ui --save,下载包2.导包在main.js中输入这几行代码:import ElementUI from ‘element-ui’;import ‘element-ui/lib/theme-chalk/index.css’;
Vue.use(ElementUI);
3.使用。我们在Element-ui这个网站上找一个现成的代码,放到App.vue中。npm run dev
https://iview.github.io/docs/guide/introduce这是另一个ui网站

2.3Iconfont阿里矢量图库 :https://www.iconfont.cn/home/index矢量图:放大后不会走形的图
3作业
4重点前后端分离的项目一个页面是怎么产生的结合axios想明白
5网址http://115.29.141.32:8085/#/mall/show/index
https://iview.github.io/
https://www.iconfont.cn/
http://www.googlefonts.cn/
https://v-charts.js.org/#/funnel
https://element.eleme.cn/#/zh-CN/component/layout

————————————————版权声明:本文为CSDN博主「-玫瑰少年-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/shihao1998/article/details/106803254
posted @ 2022-05-19 20:35  dust--  阅读(75)  评论(0编辑  收藏  举报