服务器端

服务器端项目初始化

  • start.spring.io生成项目
    • 添加三个依赖,web,mybatis,mysql
  • Idea软件 open,找到项目文件,导入
  • 逆向工程生成mybatis资源
    • 逆向工程的 公司.项目名 和初始化的 公司.项目名相同
  • 逆向工程生成mybatis资源从src/main/java/com复制到初始化项目对应的src/main/java/ 和 src/main/resources 文件下
  • 删除src/main/java/…/mapper 下的 xml
  • 只保留复制过来的静态资源中 src/main/resources/…/mapper 下的xml文件

image.png

  • 配置连接数据库文件application.yml
  • 建立controller包,添加方法select查询数据库User数据
  • 添加包扫描,运行 ```java package com.tedu.shop.controller;

@RestController public class UserController { @Autowired UserMapper userMapper;

  1. @RequestMapping("/selectAll")
  2. public List<User> selectAll(){
  3. List<User> list = userMapper.selectByExample(null);
  4. return list;
  5. }

}

  1. - 证明环境成功
  2. <a name="lnlJu"></a>
  3. ### 服务器端实现
  4. <a name="AYdf0"></a>
  5. #### 管理员模块
  6. - js不支持一个网站访问另一个网站
  7. - 协议不一样 [http://www.baidu.com](http://www.baidu.com/) [https://www.baidu.com](https://www.baidu.com/) 不是同一个网站
  8. - 端口号不一样 [http://www.baidu.com:8080](http://www.baidu.com:8080/) [http://www.baidu.com:1314](http://www.baidu.com:1314/) 不是同一个网站
  9. - 域名不一样 [http://www.tedu.cn](http://www.tedu.cn/) [http://ww.baidu.com](http://ww.baidu.com/) 不是同一个网站
  10. - 报错:has been blocked by CORS policy: No 'Access-Control-Allow-Origin'
  11. 解决方法是在controller中的方法上面加一个@ crossOrigin,加在类上也可以,但最好是加方法上
  12. ```java
  13. package com.tedu.yourshop.controller;
  14. //管理员
  15. @RestController
  16. public class AdminController {
  17. @Autowired
  18. AdminMapper adminMapper;
  19. @RequestMapping("/admin/login")
  20. //允许别的网站通过js访问我,跨域访问,加在类上或者方法上的注解
  21. @CrossOrigin
  22. public Admin login(Admin admin){
  23. AdminExample adminExample = new AdminExample();
  24. AdminExample.Criteria criteria = adminExample.or();
  25. criteria.andAdminNameEqualTo(admin.getAdminName());
  26. criteria.andAdminPasswordEqualTo(admin.getAdminPassword());
  27. List<Admin> list = adminMapper.selectByExample(adminExample);
  28. //首先判断非空,防止使用集合资源出现空指针异常
  29. if(list!=null && list.size()>=1){
  30. Admin dbAdmin = list.get(0);
  31. dbAdmin.setAdminPassword("");
  32. return dbAdmin;
  33. }else {
  34. return null;
  35. }
  36. }
  37. }

用户模块

  1. package com.tedu.yourshop.controller;
  2. //用户
  3. @RestController
  4. public class UserController {
  5. @Autowired
  6. UserMapper userMapper;
  7. //传入参数用属性,传入一个以上参数,能用对象用对象
  8. @RequestMapping("/user/register")
  9. @CrossOrigin
  10. public String register(User user){
  11. UserExample userExample = new UserExample();
  12. UserExample.Criteria criteria = userExample.or();
  13. criteria.andUsernameEqualTo(user.getUsername());
  14. List<User> list = userMapper.selectByExample(userExample);
  15. if(list!=null && list.size()==0){
  16. int count = userMapper.insertSelective(user);
  17. if(count>=1){
  18. return "注册成功!";
  19. }else {
  20. return "注册失败!";
  21. }
  22. }else {
  23. return "用户重复,重新输入!";
  24. }
  25. }
  26. @RequestMapping("/user/login")
  27. @CrossOrigin
  28. public String login(User user){
  29. UserExample userExample = new UserExample();
  30. UserExample.Criteria criteria = userExample.or();
  31. criteria.andUsernameEqualTo(user.getUsername());
  32. criteria.andPasswordEqualTo(user.getPassword());
  33. List<User> list = userMapper.selectByExample(userExample);
  34. if(list!=null && list.size()>=1){
  35. return "登录成功!";
  36. }else {
  37. return "登录失败!";
  38. }
  39. }
  40. }

商品分类

  1. package com.tedu.yourshop.controller;
  2. //商品分类
  3. @RestController
  4. @CrossOrigin
  5. public class CategoryController {
  6. @Autowired
  7. CategoryMapper categoryMapper;
  8. @RequestMapping("/category/selectAll")
  9. public List<Category> selectAll(){
  10. List<Category> list = categoryMapper.selectByExample(null);
  11. return list;
  12. }
  13. }

商品模块

  1. package com.tedu.yourshop.controller;
  2. //商品
  3. @RestController
  4. @CrossOrigin
  5. public class ItemController {
  6. @Autowired
  7. ItemMapper itemMapper;
  8. //更新商品
  9. @RequestMapping("item/updateItem")
  10. public String updateItem(Item item){
  11. int count = itemMapper.updateByPrimaryKeySelective(item);
  12. if(count>=1){
  13. return "修改商品成功!";
  14. }else {
  15. return "修改商品失败!";
  16. }
  17. }
  18. //删除商品
  19. @RequestMapping("/item/deleteItem")
  20. public String deleteItem(Integer itemId){
  21. int count = itemMapper.deleteByPrimaryKey(itemId);
  22. if(count>=1){
  23. return "删除商品成功!";
  24. }else {
  25. return "删除商品失败!";
  26. }
  27. }
  28. //查询全部商品
  29. @RequestMapping("/item/selectAll")
  30. public List<Item> selectAll(){
  31. List<Item> list = itemMapper.selectByExample(null);
  32. return list;
  33. }
  34. // http://localhost:8088/item/insertItem?categoryId=2&itemName=huawei&itemPrice=567&itemDesc=huawei&itemImage=98.jpg
  35. //添加商品
  36. @RequestMapping("/item/insertItem")
  37. public String insertItem(Item item){
  38. int count = itemMapper.insertSelective(item);
  39. if(count>=1){
  40. return "添加商品成功!";
  41. }else {
  42. return "添加商品失败!";
  43. }
  44. }
  45. //通过商品编号查询商品
  46. @RequestMapping("/item/selectItemByItemId")
  47. public Item selectItemByItemId(Integer itemId){
  48. Item item = itemMapper.selectByPrimaryKey(itemId);
  49. return item;
  50. }
  51. //通过分类ID查询商品
  52. @RequestMapping("/Item/selectByCategoryId")
  53. public List<Item> selectByCategoryId(Integer categoryId){
  54. ItemExample itemExample = new ItemExample();
  55. ItemExample.Criteria criteria = itemExample.or();
  56. criteria.andCategoryIdEqualTo(categoryId);
  57. List<Item> list = itemMapper.selectByExample(itemExample);
  58. return list;
  59. }
  60. }

客户端

  • 模板
  • mounted()

    • 加载页面自动执行这个方法

      1. <!DOCTYPE html>
      2. <html>
      3. <head>
      4. <meta charset="utf-8">
      5. <title></title>
      6. <script src="js/axios.min.js" type="text/javascript"></script>
      7. <script src="js/vue.js" type="text/javascript"></script>
      8. </head>
      9. <body>
      10. <div id="app">
      11. </div>
      12. <script>
      13. var config={
      14. el:"#app",
      15. data:{},
      16. methods:{
      17. },
      18. mounted:function(){
      19. console.log("mounted()");
      20. }
      21. }
      22. var vue = new Vue(config);
      23. </script>
      24. </body>
      25. </html>

      后台管理

      管理员登录

  • 登录成功进入后台主页面

  • adminLogin.html
  • v-model
    • 双向绑定
  • v-on:click
    • 点击事件
  • axios
    • 连接服务器,get方式请求
  • location.href

    • 页面跳转
      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
      6. <title>管理员登录</title>
      7. <script src="js/axios.min.js" type="text/javascript"></script>
      8. <script src="js/vue.js" type="text/javascript"></script>
      9. </head>
      10. <body>
      11. <div id="app">
      12. <h1>管理员登录</h1>
      13. 用户名:<input v-model="adminName"><br>
      14. 密码:<input v-model="adminPassword"> <br>
      15. <button v-on:click="login">登录</button>
      16. </div>
      17. <script>
      18. var config={
      19. el:"#app",
      20. data:{
      21. adminName:null,
      22. adminPassword:null,
      23. },
      24. methods:{
      25. login:function(){
      26. debugger;
      27. var serverUrl="http://localhost:8088/admin/login?adminName="+this.adminName+"&adminPassword="+this.adminPassword;
      28. console.log(serverUrl);
      29. axios.get(serverUrl)
      30. .then(function(response){
      31. var admin = response.data;
      32. if(admin.adminId){
      33. window.alert("管理员登录成功");
      34. location.href="index.html";
      35. }
      36. })
      37. .catch(function(e){
      38. window.alert("联网失败!");
      39. console.log(e);
      40. })
      41. }
      42. },
      43. mounted:function(){
      44. console.log("mounted()");
      45. }
      46. }
      47. var vue = new Vue(config);
      48. </script>
      49. </body>
      50. </html>

      后台主页面

  • index.html

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>后台管理主页</title>
    7. </head>
    8. <body>
    9. <a href="user.html">用户管理</a>
    10. <a href="item.html">商品管理</a>
    11. </body>
    12. </html>

    商品管理

  • 商品的增加、删除、修改,查询

  • item.html
  • v-bind
    • 强制绑定
  • v-for
    • 循环
  • window.confirm
    • 弹窗确认操作
  • itemCategoryId表示此时用户选中的商品ID
  • categoryList
    • 服务器返回的商品分类数据集合
  • 修改

    • ‘update.html?itemId=’ 表示字符串

      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
      6. <title>商品管理</title>
      7. <script src="js/axios.min.js" type="text/javascript"></script>
      8. <script src="js/vue.js" type="text/javascript"></script>
      9. </head>
      10. <body>
      11. <div id="app">
      12. 分类:<select v-model="itemCategoryId">
      13. <!-- itemCategoryId默认是获得选择框里面的值(文字),
      14. 绑定id后v-bind:value="category.categoryId",itemCategoryId得到的就是文字对应的ID了
      15. 后面就根据它插入商品分类-->
      16. <option v-for="category in categoryList" v-bind:value="category.categoryId">
      17. {{category.categoryName}}
      18. </option>
      19. </select><br>
      20. 名称:<input v-model="itemName"><br>
      21. 价格:<input v-model="itemPrice"><br>
      22. 描述:<input v-model="itemDesc"><br>
      23. 图片:<input v-model="itemImage"><br>
      24. <button v-on:click="addItem()">添加</button><br>
      25. <table border="2">
      26. <tr>
      27. <td>商品编号</td>
      28. <td>商品名称</td>
      29. <td>商品价格</td>
      30. <td>删除</td>
      31. <td>修改</td>
      32. </tr>
      33. <tr v-for="item in itemList">
      34. <td>{{item.itemId}}</td>
      35. <td>{{item.itemName}}</td>
      36. <td>{{item.itemPrice}}</td>
      37. <!-- v-on:click不仅仅是用在按钮上 -->
      38. <td v-on:click="deleteItem(item.itemId)">删除</td>
      39. <!-- 强制绑定为地址 -->
      40. <td><a v-bind:href="'update.html?itemId='+item.itemId">修改</a></td>
      41. </tr>
      42. </table>
      43. </div>
      44. <script>
      45. var config={
      46. el:"#app",
      47. data:{
      48. itemCategoryId:null,
      49. categoryList:[],
      50. itemName:"",
      51. itemPrice:"",
      52. itemDesc:"",
      53. itemImage:"",
      54. itemList:[],
      55. },
      56. methods:{
      57. findCategory:function(){
      58. // debugger;
      59. var serverUrl="http://localhost:8088/category/selectAll";
      60. console.log(serverUrl);
      61. var vue = this;
      62. axios.get(serverUrl)
      63. .then(function(response){
      64. vue.categoryList = response.data;
      65. })
      66. .catch(function(e){
      67. window.alert("联网失败");
      68. console.log(e);
      69. })
      70. },
      71. findAllItem:function(){
      72. // debugger;
      73. var serverUrl="http://localhost:8088/item/selectAll";
      74. console.log(serverUrl);
      75. var vue = this;
      76. axios.get(serverUrl)
      77. .then(function(response){
      78. // debugger;
      79. console.log(response.data);
      80. vue.itemList = response.data;
      81. })
      82. .catch(function(e){
      83. window.alert("联网失败");
      84. console.log(e);
      85. })
      86. },
      87. addItem:function(){
      88. // debugger;
      89. var serverUrl="http://localhost:8088/item/insertItem?categoryId="+this.itemCategoryId
      90. +"&itemName="+this.itemName
      91. +"&itemPrice="+this.itemPrice
      92. +"&itemDesc="+this.itemDesc
      93. +"&itemImage="+this.itemImage;
      94. // console.log(serverUrl);
      95. var vue = this;
      96. axios.get(serverUrl)
      97. .then(function(response){
      98. window.alert("添加商品成功");
      99. vue.findAllItem();
      100. })
      101. .catch(function(e){
      102. window.alert("联网失败");
      103. console.log(e);
      104. })
      105. },
      106. deleteItem:function(itemId){
      107. // debugger;
      108. var result = window.confirm("是否确认删除");
      109. if(result){
      110. var serverUrl = "http://localhost:8088/item/deleteItem?itemId="+itemId;
      111. console.log(serverUrl);
      112. var vue = this;
      113. axios.get(serverUrl)
      114. .then(function(response){
      115. window.alert(response.data);
      116. vue.findAllItem();
      117. })
      118. .catch(function(e){
      119. window.alert("联网失败");
      120. console.log(e);
      121. })
      122. }
      123. }
      124. },
      125. mounted:function(){
      126. console.log("mounted()");
      127. this.findCategory();
      128. this.findAllItem();
      129. }
      130. }
      131. var vue = new Vue(config);
      132. </script>
      133. </body>
      134. </html>
  • 修改

  • update.html

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>更新</title>
    7. <script src="js/axios.min.js" type="text/javascript"></script>
    8. <script src="js/vue.js" type="text/javascript"></script>
    9. </head>
    10. <body>
    11. <div id="app">
    12. 分类:<select v-model="itemCategoryId">
    13. <option v-for="category in categoryList" v-bind:value="category.categoryId">
    14. {{category.categoryName}}
    15. </option>
    16. </select>
    17. <br>
    18. 商品名称:<input v-model="item.itemName"><br>
    19. 商品价格:<input v-model="item.itemPrice"><br>
    20. 商品描述:<input v-model="item.itemDesc"><br>
    21. 商品图片:<input v-model="item.itemImage"><br>
    22. <button v-on:click="updateItem()">更新</button><br>
    23. <br>
    24. <a href="item.html">商品管理</a>
    25. </div>
    26. <script>
    27. var config={
    28. el:"#app",
    29. data:{
    30. itemCategoryId:null,
    31. categoryList:[],
    32. item:{
    33. }
    34. },
    35. methods:{
    36. //负责select的分类数据显示
    37. findCategory:function(){
    38. // debugger;
    39. var serverUrl="http://localhost:8088/category/selectAll";
    40. console.log(serverUrl);
    41. var vue = this;
    42. axios.get(serverUrl)
    43. .then(function(response){
    44. vue.categoryList = response.data;
    45. })
    46. .catch(function(){
    47. window.alert("联网失败!");
    48. console.log(e);
    49. })
    50. },
    51. //负责商品信息显示,地址栏的数据不同,导致分类的的显示值也跟着更改
    52. findItemById:function(itemId){
    53. debugger;
    54. var serverUrl = "http://localhost:8088/item/selectItemByItemId?itemId="+itemId;
    55. console.log(serverUrl);
    56. var vue = this;
    57. axios.get(serverUrl)
    58. .then(function(response){
    59. // debugger;
    60. vue.item =response.data;
    61. //通过商品ID查到商品信息,获得商品的分类ID,修改itemCategoryId的值,相互绑定更改页面显示
    62. vue.itemCategoryId=vue.item.categoryId;
    63. })
    64. .catch(function(e){
    65. //刚打开页面出现联网失败,是因为地址栏没有输入参数地址 ?itemId=2
    66. window.alert("联网失败!");
    67. console.log(e);
    68. })
    69. },
    70. //负责商品的修改,双向绑定的是itemCategoryId,所以url中写的是this.itemCategoryId
    71. updateItem:function(){
    72. debugger;
    73. var serverUrl = "http://localhost:8088/item/updateItem?itemId="+this.item.itemId
    74. +"&categoryId="+this.itemCategoryId
    75. +"&itemName="+this.item.itemName
    76. +"&itemPrice="+this.item.itemPrice
    77. +"&itemDesc="+this.item.itemDesc
    78. +"&itemImage="+this.item.itemImage;
    79. console.log(serverUrl);
    80. console.log(this.itemCategoryId);
    81. console.log(this.item.categoryId);
    82. // console拷贝url到浏览器测试url是否正确
    83. axios.get(serverUrl)
    84. .then(function(response){
    85. window.alert(response.data);
    86. })
    87. .catch(function(e){
    88. window.alert("联网失败!");
    89. console.log(e);
    90. })
    91. }
    92. },
    93. mounted:function(){
    94. console.log("mounted()");
    95. // 调用方法
    96. this.findCategory();
    97. //获得地址栏数据 ?itemId=2 获得值2作为方法findItemById的参数
    98. var p=location.search;
    99. p=p.substr(1);
    100. var strArray = p.split("=");
    101. var itemId=strArray[1];
    102. this.findItemById(itemId);
    103. }
    104. }
    105. var vue = new Vue(config);
    106. </script>
    107. </body>
    108. </html>

    image.png

    用户管理

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>用户管理</title>
    7. </head>
    8. <body>
    9. 用户管理,待完善
    10. </body>
    11. </html>

前台页面

主页面

  • 注册、登录
  • 点击不同的商品分类,显示不同的商品(电脑、手机)
  • 点击不同的商品,显示商品详情
  • 注意 v-bind:src 与 v-bind:href的不同

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <script src="js/axios.min.js" type="text/javascript"></script>
    7. <script src="js/vue.js" type="text/javascript"></script>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <a href="register.html">注册</a><br>
    12. <a href="login.html">登录</a>
    13. <table>
    14. <tr>
    15. <!--无意中出现动画效果: <td v-for="category in categoryList" v-bind:src="findItemByCategoryId(category.categoryId)">{{category.categoryName}}</td> -->
    16. <td v-for="category in categoryList" v-on:click="findItemByCategoryId(category.categoryId)">{{category.categoryName}}</td>
    17. </tr>
    18. </table>
    19. <table>
    20. <tr v-for="item in itemList">
    21. <td><a v-bind:href="'detail.html?itemId='+item.itemId"> <img v-bind:src="item.itemImage" width="100" height="100">
    22. {{item.itemName}}</a></td>
    23. </tr>
    24. </table>
    25. </div>
    26. <script>
    27. var config={
    28. el:"#app",
    29. data:{
    30. categoryList:[],
    31. itemList:[]
    32. },
    33. methods:{
    34. //将商品分类渲染到页面
    35. findCategory:function(){
    36. // debugger;
    37. var serverUrl = "http://localhost:8088/category/selectAll";
    38. var vue = this;
    39. axios.get(serverUrl)
    40. .then(function(response){
    41. debugger;
    42. vue.categoryList = response.data;
    43. })
    44. .catch(function(e){
    45. window.alert("联网失败");
    46. console.log(e);
    47. })
    48. },
    49. //点击不同的分类,显示不同的商品信息
    50. findItemByCategoryId:function(itemId){
    51. debugger;
    52. var serverUrl = "http://localhost:8088/Item/selectByCategoryId?categoryId="+itemId;
    53. // console.log(serverUrl);
    54. var vue = this;
    55. axios.get(serverUrl)
    56. .then(function(response){
    57. debugger;
    58. vue.itemList = response.data;
    59. })
    60. .catch(function(e){
    61. window.alert("联网失败");
    62. console.log(e);
    63. })
    64. }
    65. },
    66. mounted:function(){
    67. console.log("mounted()");
    68. this.findCategory();
    69. this.findItemByCategoryId(1);
    70. }
    71. }
    72. var vue = new Vue(config);
    73. </script>
    74. </body>
    75. </html>

    image.png

    注册

  • vue中,div里面用{{}}取属性值;script用this取属性值

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <script src="js/axios.min.js" type="text/javascript"></script>
    7. <script src="js/vue.js" type="text/javascript"></script>
    8. </head>
    9. <body>
    10. <div id="app">
    11. 用户名:<input v-model="username"><br>
    12. 密码:<input v-model="password"><br>
    13. 确认密码:<input v-model="newPassword"><br>
    14. <button v-on:click="register()">注册</button>
    15. <a href="index.html">主页</a>
    16. </div>
    17. <script>
    18. var config={
    19. el:"#app",
    20. data:{
    21. username:"",
    22. password:"",
    23. newPassword:""
    24. },
    25. methods:{
    26. register:function(){
    27. if(this.username != this.newPassword){
    28. window.alert("两次密码不一致!");
    29. return;
    30. }
    31. var serverUrl = "http://localhost:8088/user/register?username="+this.username+"&password="+this.password;
    32. // console.log(serverUrl);
    33. axios.get(serverUrl)
    34. .then(function(response){
    35. window.alert(response.data);
    36. })
    37. .catch(function(e){
    38. window.alert("联网失败");
    39. console.log(e);
    40. })
    41. }
    42. },
    43. mounted:function(){
    44. console.log("mounted()");
    45. }
    46. }
    47. var vue = new Vue(config);
    48. </script>
    49. </body>
    50. </html>

    登录

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <script src="js/axios.min.js" type="text/javascript"></script>
    7. <script src="js/vue.js" type="text/javascript"></script>
    8. </head>
    9. <body>
    10. <div id="app">
    11. <h1>登录</h1>
    12. 用户名:<input v-model="username"><br>
    13. 密码:<input v-model="password"><br>
    14. <button v-on:click="login()">登录</button>
    15. </div>
    16. <script>
    17. var config={
    18. el:"#app",
    19. data:{
    20. username:"",
    21. password:"",
    22. },
    23. methods:{
    24. login:function(){
    25. var serverUrl = "http://localhost:8088/user/login?username="+this.username+"&password="+this.password;
    26. // console.log(serverUrl);
    27. axios.get(serverUrl)
    28. .then(function(response){
    29. window.alert(response.data);
    30. location.href="index.html";
    31. })
    32. .catch(function(e){
    33. window.alert("联网失败");
    34. console.log(e);
    35. })
    36. }
    37. },
    38. mounted:function(){
    39. console.log("mounted()");
    40. }
    41. }
    42. var vue = new Vue(config);
    43. </script>
    44. </body>
    45. </html>

    商品详情

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title></title>
      <script src="js/axios.min.js" type="text/javascript"></script>
      <script src="js/vue.js" type="text/javascript"></script>
    </head>
    <body>
      <div id="app">
        <img v-bind:src="item.itemImage"><br>
        {{item.itemName}}<br>
        {{item.itemPrice}}<br>
        {{item.itemDesc}}<br>
        评论
    
      </div>
      <script>
        var config={
          el:"#app",
          data:{
            item:null
          },
          methods:{
    
          },
          mounted:function(){
            console.log("mounted()");
            var address = location.search;
            address = address.substr(1);
            var addArray = address.split("=");
            var itemId = addArray[1];
            var serverUrl = "http://localhost:8088/item/selectItemByItemId?itemId="+itemId;
            // console.log(serverUrl);
            var vue = this;
            axios.get(serverUrl)
            .then(function(response){
              vue.item =  response.data;
            })
            .catch(function(e){
              window.alert("联网失败");
              console.log(e);
            })
          }
        }
        var vue = new Vue(config);
      </script>
    
    </body>
    </html>
    
  • https://gitee.com/revolutionary_base/project/tree/master/shop

常见问题

  • 假如你认为项目是完全正确的,并且出现了 url…datasource错误
    • 那么项目右键 rebuild