使用 vue2.0 开发的开眼视频详情

FrankieFabr 8年前
   <p>最近一直在学习vuejs,手痒之余决定使用vuejs做一些东西</p>    <p>正好一直觉得开眼APP的风格很惹人喜欢,所以决定用vuejs仿写一个简单的h5的开眼实现</p>    <h2>TODO</h2>    <ul>     <li>视频列表</li>     <li>视频详情 :white_check_mark:</li>    </ul>    <h2>项目构建</h2>    <p>首先全局安装 vue-cli ,几个简单的步骤就可以帮助你快速构建一个vue项目。</p>    <pre>  <code class="language-javascript">npm install -g vue-cli  </code></pre>    <p>然后,利用vue-cli构建一个vue项目,并安装项目依赖</p>    <pre>  <code class="language-javascript">vue init webpack eyepetizer  cd eyepetizer & npm install  </code></pre>    <p>生成修改后的项目文件如下</p>    <pre>  <code class="language-javascript">├── build //webpack基本配置文件  ├── config //配置文件相关  ├── dist //build生成后的文件相关  │  ├── src  │   ├── assets //项目使用scss资源  │   │   └── scss  │   ├── components //组件相关  │   ├── lib //api或其他需要引用的lib  │   ├── router //router相关  │   └── store //vuex store相关  │  ├── static //项目静态文件  └── test //测试文件  </code></pre>    <h2>项目配置与开发</h2>    <p>项目中使用了sass vue-router vuex querystring等库,先安装相关依赖包</p>    <pre>  <code class="language-javascript">npm install sass-loader vuex style-loader node-sass moment css-loader axios file-loader querystring vue-router --save-dev  </code></pre>    <p>然后在基本页面实现并配置相关路由:</p>    <pre>  <code class="language-javascript">import Vue from 'vue';  import Router from 'vue-router';    import Hello from 'components/Hello';  import Detail from 'components/Detail';    Vue.use(Router);    export default new Router({    scrollBehavior: () => ({ y: 0 }),    routes: [      {        path: '/',        name: 'Hello',        component: Hello,      },      {        path: '/detail/:vid',        name: 'Detail',        component: Detail,      },    ],  });  </code></pre>    <p>其中hello为页面首页,最终会实现为视频列表页面,目前先说视频详情页面:</p>    <p>API:</p>    <pre>  <code class="language-javascript"># 获取视频详情  http://baobab.wandoujia.com/api/v1/video/14416    # 获取关联视频  http://baobab.wandoujia.com/api/v1/video/related/14416?num=5    # 获取当前视频评论  http://baobab.wandoujia.com/api/v1/replies/video?id=14416#=5  </code></pre>    <p>Store:</p>    <p>主要包含:state、action、getters、mutations</p>    <p>在组件method中通过触发dispatch来修改state</p>    <pre>  <code class="language-javascript">fetchData() {    const VID = this.$route.params.vid;    if (!VID) {      this.$router.go('/');    }    this.$store.dispatch('getVideoInfo', { VID });    this.$store.dispatch('getRelateVideoList', { VID });    this.$store.dispatch('getRepliesVideoList', { VID });  }  </code></pre>    <p>将state中的对象通过mapGetters映射给自定义变量:</p>    <pre>  <code class="language-javascript">computed:{    ...mapGetters({      video: 'videoInfo',      videoList: 'relateList',      replyList: 'repliesList',    }),    v() {      /* eslint-disable */      const _v = this.video;      return {        title: _v.title,        desc: _v.description,        cat: _v.category,        tags: _v.tags,        url: _v.playUrl,        time: _v.time,        cover: {          backgroundImage: `url(${_v.coverForDetail})`,        },      };    },  }  </code></pre>    <p>然后在组件中调用:</p>    <pre>  <code class="language-javascript"><div class="vue-meta-positioner">    <div class="video-meta">      <h1>{{v.title}}</h1>      <div class="divider divider-short"></div>      <p>{{v.cat}} / {{v.time}}</p>      <p class="desciption">        {{v.desc}}      </p>    </div>  </div>  </code></pre>    <p>最终效果:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/fdef7a720149377f673b890415b566b8.png"></p>    <h2>部署项目</h2>    <p>执行命令</p>    <pre>  <code class="language-javascript">npm run build  </code></pre>    <p>然后会生成一个dist文件夹,该文件夹中就是我们可以用来发布的代码</p>    <p> </p>    <p>来自:http://blog.marryto.me/vuejs-eyepetizer/</p>    <p> </p>