zoukankan      html  css  js  c++  java
  • vue项目模拟后台数据

    这次我们来模拟一些后台数据,然后去请求它并且将其渲染到界面上。关于项目的搭建鄙人斗胆向大家推荐我的一篇随笔《Vue开发环境搭建及热更新》

    一、数据建立

    我这里为了演示这个过程所以自己编写了这个data.json文件
     1 {
     2     "school":{
     3         "students":[
     4         {
     5             "name":"方毅",
     6             "sex":"男",
     7             "age":21,
     8             "class":1,
     9             "Chinese":100,
    10             "Math":90,
    11             "English":88,
    12             "TotalPoint":278        
    13         },
    14         {
    15             "name":"黎倩",
    16             "sex":"女",
    17             "age":20,
    18             "class":1,
    19             "Chinese":98,
    20             "Math":80,
    21             "English":75,
    22             "TotalPoint":253        
    23         },
    24         {
    25             "name":"陈二",
    26             "sex":"男",
    27             "age":22,
    28             "class":2,
    29             "Chinese":70,
    30             "Math":60,
    31             "English":50,
    32             "TotalPoint":180        
    33         },
    34         {
    35             "name":"邓珊",
    36             "sex":"女",
    37             "age":22,
    38             "class":2,
    39             "Chinese":72,
    40             "Math":68,
    41             "English":90,
    42             "TotalPoint":230        
    43         },
    44         {
    45             "name":"李四",
    46             "sex":"男",
    47             "age":23,
    48             "class":3,
    49             "Chinese":88,
    50             "Math":72,
    51             "English":90,
    52             "TotalPoint":250        
    53         },
    54         {
    55             "name":"何武",
    56             "sex":"男",
    57             "age":20,
    58             "class":3,
    59             "Chinese":75,
    60             "Math":80,
    61             "English":60,
    62             "TotalPoint":215        
    63         },
    64         {
    65             "name":"冯柳",
    66             "sex":"女",
    67             "age":20,
    68             "class":4,
    69             "Chinese":100,
    70             "Math":99,
    71             "English":88,
    72             "TotalPoint":287        
    73         }],
    74         "teacher":[
    75             {
    76                 "class":1,
    77                 "name":"Miss Lee"
    78             },
    79             {
    80                 "class":2,
    81                 "name":"Miss Gao"
    82             },
    83             {
    84                 "class":3,
    85                 "name":"Mr Fang"
    86             },
    87             {
    88                 "class":4,
    89                 "name":"Miss wu"
    90             }
    91         ]
    92     }
    93 }
    data.json
    我们将这个文件放在src同级目录下。
    这个json的构建思路,就是学校里面有学生students和老师teacher,学生有成绩等信息,老师有执教班级姓名信息。

    二、编写 dev-server.js文件

    在dev-server.js文件中,我们在var app = express()后面加入这么一段代码
     1 var app = express()
     2 //获取data.json数据
     3 var scoreData = require('../data.json');
     4 //获取data.json文件里面的school
     5 var school = scoreData.school;
     6 //编写路由
     7 var apiR = express.Router();
     8 apiR.get('/school', function (req, res) {
     9   res.json({
    10     errno: 0,
    11     data: school
    12   });
    13 });
    14 app.use('/api', apiR);
    编写完之后我们来测试一下到底能不能请求得到这些数据,我们在浏览器地址栏输入localhost:8080/api/students/
    8080是我默认的端口,具体的还要看config目录下的index.js文件
    修改这里即可更改端口号,我们刚才说所有接口相关的api都会通过/api这个路径,所以我们在地址栏的地址就是如上所示。
    在这里有一个小小的坑,如果我们修改的是项目的配置文件的话,记得重新cnpm run dev重新启动项目,不然是不会生效,还可能出错的!千万记住这一步,有时候经常犯浑的。
    enter之后我们就可以看到请求到的json

    三、将请求的数据渲染到页面上

    接下来我们就来把请求到的数据渲染到页面上。

    1.请求数据,数据传递

    我们首先在App.vue这个组件获取数据,再传递给子组件hello,这时候我们异步请求数据需要用到vue-resource,这时候我们要先安装vue-resource,在package.json文件中,加上这句话
    然后在cmd命令行中cnpm install重新安装依赖。
    记住,使用之前先在src文件夹下面的入口文件main.js里面导入vue-resource插件并使用
    安装完vue-resource之后我们首先来使用它异步请求数据,在App.vue文件中
     1 <template>
     2   <div id="app">
     3     <hello :school="school"></hello><!--v-bind传递数据-->
     4   </div>
     5 </template>
     6 
     7 <script>
     8 import hello from './components/Hello.vue'//导入组件
     9 
    10 
    11 export default {
    12   data(){
    13     return{
    14       school:{}
    15     }
    16   },
    17   created(){
    18     this.$http.get('/api/school').then((response)=>{//异步请求数据
    19     response=response.body
    20     if(response.errno===0){
    21       this.school=response.data
    22       console.log(this.school)//我们先来控制台看看数据有没有获取到,这句测试完之后记得删除
    23     }
    24     })
    25   },
    26   components:{//注册hello组件
    27     'hello':hello
    28   }
    29 }
    30 </script>
    31 
    32 <style>
    33 </style>
    我们得到了一个Object类型的数据,接下来我们来编写一下hello组件,将App父组件获取到的数据传递给它,并渲染到页面上
     1 <template>
     2   <div class="hello">
     3     <table class="stu">
     4       <caption>学生成绩表</caption>
     5       <tr class="stu-th">
     6         <th v-for="t in title">{{t}}</th>
     7       </tr>
     8       <tr v-for="row in school.students">
     9         <td>{{row.name}}</td>
    10         <td>{{row.sex}}</td>
    11         <td>{{row.age}}</td>
    12         <td>{{row.Chinese}}</td>
    13         <td>{{row.Math}}</td>
    14         <td>{{row.English}}</td>
    15         <td>{{row.TotalPoint}}</td>
    16       </tr>
    17     </table>
    18     <table class="che">
    19       <caption>教师执教班级</caption>
    20       <tr class="che-th">
    21         <th v-for="c in teacher">{{c}}</th>
    22       </tr>
    23       <tr v-for="rows in school.teacher">
    24         <td>{{rows.name}}</td>
    25         <td>{{rows.class}}</td>
    26       </tr>
    27     </table>
    28   </div>
    29 </template>
    30 
    31 
    32 <script>
    33 export default {
    34   data(){
    35     return{
    36       title:['姓名','性别','年龄','语文','数学','英语','总分'],
    37       teacher:['教师姓名','班级']
    38     }
    39   },
    40   props:{//接收App父组件传递过来的school数据
    41     school:{
    42       type:Object//定义传递过来的数据类型为Object,因为我们前面说到获取到的数据类型为Object
    43     }
    44   }
    45 }
    46 </script>
    47 
    48 
    49 <!-- Add "scoped" attribute to limit CSS to this component only -->
    50 <style>
    51 </style>
    现在我们可以稍微的看一下效果
    太难看了,接下来我们用stylus来给它添加一些样式

    2.stylus的安装和使用

    Stylus - 富有表现力的、动态的、健壮的CSS,这是张鑫旭大神对它的定义,我们现在来安装和使用它
    首先在package.json里面的devDependencies项目依赖添加"stylus-loader": "^2.1.1"这一项,然后再重新安装,npm install stylus
    接下来编写他们的样式,在hello.vue文件中
     1 <style>
     2 .stu
     3   700px
     4   border:solid 2px black
     5   .stu-th
     6     background:rgb(0,136,225)
     7   tr
     8     text-align:center
     9 .che
    10   700px
    11   border:solid 2px black
    12   .che-th
    13     background:rgb(0,136,225)
    14   tr
    15     text-align:center
    16 </style>
    虽然我们安装了stylus-loader,也定义了样式,但是运行结果还是出错
    语法出错,我们把<style>改成<style lang="stylus" rel="stylesheet/stylus">这样,就没问题了,我们来看看效果
    现在效果好看多了。

    四、结语

    这个项目主要是为了了解一下前后端交互的过程,大家下载完项目模板之后,按照上面的步骤修改相应的代码就可以得到你想要的效果。
  • 相关阅读:
    Android 六种核心安全机制
    Android 网络通信 HTTP
    Android Thread和AsyncTask
    C#(少用的)
    Asp.net动态生成表单
    设计模式--职责链(学习)
    Extjs表单验证小结
    C#框架
    Javascript获取IFrame内容(兼容IE&FF)
    最近在忙淘宝店的事
  • 原文地址:https://www.cnblogs.com/nangxi/p/7428572.html
Copyright © 2011-2022 走看看