小白的vue学习之路04项目



项目技术框架:


项目首页:






项目:

main.js

'use strict';


//引入第三方包 开始
import Vue from 'vue';

//VueRouter:引入路由对象
import VueRouter from 'vue-router';
//VueRouter:安装插件
Vue.use(VueRouter);

//Mint:引入mint-ui
import Mint from 'mint-ui';
//Mint:引入css
import 'mint-ui/lib/style.css';
//Mint:安装插件
Vue.use(Mint);
//MUI:引入mui的样式
import './static/vendor/mui/dist/css/mui.css';
//全局样式
import './static/css/global.css';


//Axios:引入axios
import Axios from 'axios';
//挂载原型
Vue.prototype.$ajax = Axios;
//默认配置
Axios.defaults.baseURL = 'http://182.254.146.100:8899/api/';
//Moment:引入moment
import Moment from 'moment';

//引入第三方包 结束

//引入全局组件需要的组件对象 开始
import NavBar from './components/common/navBar.vue';
//引入全局组件需要的组件对象 结束

//定义成全局组件或过滤器,大家都能使用 开始
Vue.filter('convertDate',function(value){
    return Moment(value).format('YYYY-MM-DD');
});
Vue.component('navBar',NavBar); //使用最好以nav-bar
//定义全局组件或过滤器 结束

//引入自己的vue文件 开始  
import App from './app.vue';
import Home from './components/home/home.vue';
import Member from './components/member/member.vue';
import Shopcart from './components/shopcart/shopcart.vue';
import Search from './components/search/search.vue';
import NewsList from './components/news/newsList.vue';
import NewsDetail from './components/news/newsDetail.vue';


//引入自己的vue文件 结尾


//VueRouter:创建对象并配置路由规则!!!导航
let router = new VueRouter({
    linkActiveClass:'mui-active',
    routes: [
        //VueRouter:配置路由规则
        { path: '/', redirect: { name: 'home' } }, //重定向
        { name: 'home', path: '/home', component: Home },//首页
        { name:'member',path:'/member',component: Member}, //会员
        { name: 'shopcart',path:'/shopcart',component:Shopcart}, //购物车
        { name: 'search',path:'/search',component:Search}, //查找
        { name:'news.list',path:'/news/list',component:NewsList}, //新闻列表
        { name:'news.detail',path:'/news/detail',component:NewsDetail}, //新闻详情
    ]
});

//创建vue实例
new Vue({
    el: '#app',
    router,
    render: c => c(App)
})
app.vue
<template>
    <div>
            <!-- 头部内容 -->
            <mt-header title="传智27期信息管理系统"></mt-header>
            <router-view></router-view>
            <!-- 底部内容 -->
            <nav class="mui-bar mui-bar-tab">
            <router-link class="mui-tab-item" :to="{name:'home'}">
                <span class="mui-icon icon-shouye1"></span>
                <span class="mui-tab-label">首页</span>
            </router-link>
            <router-link class="mui-tab-item" :to="{name:'member'}">
                <span class="mui-icon icon-diamond"></span>
                <span class="mui-tab-label">会员</span>
            </router-link>
            <router-link class="mui-tab-item" :to="{name:'shopcart'}">
                <span class="mui-icon icon-gouwucheman"><span class="mui-badge">9</span></span>
                <span class="mui-tab-label">购物车</span>
            </router-link>
            <router-link class="mui-tab-item" :to="{name:'search'}">
                <span class="mui-icon mui-icon-search"></span>
                <span class="mui-tab-label">查找</span>
            </router-link>
        </nav>
    </div>
</template>
<script>
</script>
<style>
    
</style>

home.vue

<template>
    <div>
        <!-- home也轮播图 -->
        <mt-swipe :auto="4000">
          <mt-swipe-item v-for="(img,index) in imgs" :key="index"><a :href="img.url"><img :src="img.img"></a></mt-swipe-item>
        </mt-swipe>
        <!-- home九宫格 -->
        <div class="mui-content">
                <ul class="mui-table-view mui-grid-view mui-grid-9">
                    <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3">
                    <!-- 1:去哪里 -->
                        <router-link :to="{name:'news.list'}">
                            <span class="mui-icon mui-icon-home"></span>
                            <div class="mui-media-body">新闻资讯</div>
                        </router-link>
                    </li>
                    <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"><a href="#">
                            <span class="mui-icon mui-icon-email"></span>
                            <div class="mui-media-body">图文分享</div></a></li>
                    <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"><a href="#">
                            <span class="mui-icon mui-icon-chatbubble"></span>
                            <div class="mui-media-body">商品展示</div></a></li>
                    <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"><a href="#">
                            <span class="mui-icon mui-icon-location"></span>
                            <div class="mui-media-body">留言反馈</div></a></li>
                    <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"><a href="#">
                            <span class="mui-icon mui-icon-search"></span>
                            <div class="mui-media-body">搜索资讯</div></a></li>
                    <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3"><a href="#">
                            <span class="mui-icon mui-icon-phone"></span>
                            <div class="mui-media-body">联系我们</div></a></li>
                </ul> 
        </div>
    </div>
</template>
<script>
    export default {
        data(){
            return {
                imgs:[],//轮播图列表
            }
        },
        created(){
            //发起请求
            this.$ajax.get('getlunbo')
            .then(res=>{
                console.log(res.data.message);
                this.imgs = res.data.message;
            })
        }
    }
</script>
<style scoped>
/*轮播图样式*/
.mint-swipe{
    max-height:187px; 
}
.mint-swipe img {
    height: 100%;
}
/*九宫格样式*/
.mui-table-view.mui-grid-view.mui-grid-9{
    background-color: white;
     border: 0;
     margin-top: 0px;
}
.mui-table-view.mui-grid-view.mui-grid-9 li{
    border: 0;
}
/*九宫格清除字体图标*/
.mui-icon-home:before,
.mui-icon-email:before,
.mui-icon-chatbubble:before,
.mui-icon-location:before,
.mui-icon-search:before,
.mui-icon-phone:before{
    content: '';
}
/*九宫格背景图片*/
.mui-icon-home{
    background-image: url('../../static/img/news.png');
    background-repeat: round;
}
.mui-icon-email{
    background-image: url('../../static/img/picShare.png');
    background-repeat: round;
}
.mui-icon-chatbubble{
    background-image: url('../../static/img/goodShow.png');
    background-repeat: round;
}
.mui-icon-location{
    background-image: url('../../static/img/feedback.png');
    background-repeat: round;
}
.mui-icon-search{
    background-image: url('../../static/img/search.png');
    background-repeat: round;
}
.mui-icon-phone{
    background-image: url('../../static/img/callme.png');
    background-repeat: round;
}
/*九宫格图标宽高*/
.mui-icon{
    height: 50px;
    width:50px;
}
</style>


navBar.vue

<template>
    <div>
        <header class="mui-bar mui-bar-nav">
            <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left" @click="goBack"></a>
            <h1 class="mui-title">{{title}}</h1>
        </header>
    </div>
</template>
<script>
    export default {
        data(){
            return {

            }
        },
        props:['title'],//声明接收父组件参数
        methods:{
            goBack(){
                this.$router.go(-1); //根据浏览器记录返回上一次
            }
        }

    }
</script>
<style scoped>
.mui-bar.mui-bar-nav{
    position: relative;
}
</style>
newslist.vue
<template>
    <div class="tmpl">
    
        <nav-bar title="新闻列表"></nav-bar>


    <!-- MUI 图文列表 -->
        <ul class="mui-table-view">
            <li v-for="news in newsList" :key="news.id" class="mui-table-view-cell mui-media">
                <router-link :to="{name:'news.detail',query:{id:news.id} }">
                    <img class="mui-media-object mui-pull-left" :src="news.img_url">
                    <div class="mui-media-body">
                        <span v-text="news.title"></span>
                        <div class="news-desc">
                            <p>点击数:{{news.click}}</p>
                            <p>发表时间:{{news.add_time | convertDate}}</p>
                        </div>
                    </div>
                </router-link>
            </li>
        </ul>
    </div>
</template>
<script>
export default {
    data(){
        return {
            newsList:[],//新闻列表数据
        }
    },
    created(){
        //发起请求
        this.$ajax.get('getnewslist')
        .then(res=>{
            this.newsList = res.data.message;
        })
        .catch(err=>{
            console.log(err);
        })
    }
}

</script>
<style scoped>
.mui-media-body p {
    color: #0bb0f5;
}

.news-desc p:nth-child(1) {
    float: left;
}

.news-desc p:nth-child(2) {
    float: right;
}
</style>

newsdetail.vue
<template>
    <div class="tmpl">
        <nav-bar title="新闻详情"></nav-bar>
        <div class="news-title">
            <p v-text="newsDetail.title"></p>
            <div>
                <span>{{newsDetail.click}}次点击</span>
                <span>分类:民生经济</span>
                <span>添加时间:{{newsDetail.add_time | convertDate}}</span>
            </div>
        </div>
        <div class="news-content" v-html="newsDetail.content"></div>
    </div>
</template>
<script>
export default {
    data(){
        return {
            newsDetail:{}, //就是为了象征性的表示其数据类型
        }
    },created(){
        //1:获取路由参数
        let id = this.$route.query.id;
        //2:拼接路由参数成为后台请求的URL
        this.$ajax.get('getnew/' + id)
        .then(res=>{
             //3:响应回来渲染页面
             this.newsDetail = res.data.message[0]; 
             //数组,就一个数据,所以直接取[0]
        })
        .catch(err=>{
            console.log(err);
        })
       
    }
}

</script>
<style scoped>
.news-title p {
    color: #0a87f8;
    font-size: 20px;
    font-weight: bold;
}

.news-title span {
    margin-right: 30px;
}

.news-title {
    margin-top: 5px;
    border-bottom: 1px solid rgba(0, 0, 0, 0.2);
}


/*主体文章的左右距离*/

.news-content {
    padding: 10 5;
}
</style>

global.css

body {
    background-color: white;
}
.tmpl{
    margin-bottom: 50px;
}

其中有css-loader style-loader 

mint-ui

mui.css

vue-router

moment(转换时间插件)

axios:get和post请求,传数据






```的JavaScript

npm我mint-ui vue-preview axios vue-router monent vue - S;

npm我webpack html - webpack - 插件

 css - loader样式 - 加载器less less - 加载器autoprefixer - 加载器babel - 加载器babel - 核心babel - 预设 - es2015 babel - 插件 - 转换 - 运行时url - 加载器文件 - 加载器vue - 加载器vue - 模板 - 编译器webpack-dev-server - D

```

设置图标:

方法:(以footer导航为例)

第一步 在http : //www.dcloud.io/hellomui/中先找到设置的footer导航样式

第二步 在http://www.iconfont.cn/ 把下载文件中icon-font.css的

.icon-gouwucheman:before {content:“\ e600”; }
.icon-huiyuan21:before {content:“\ e641”; }
.icon-shouye:before {content:“\ e61e”; }
.icon-gouwuche:before {content:“\ e613”; }
.icon-huiyuan:before {content:“\ e654”; }
.icon-gouwuche1:before {content:“\ e61a”; }
.icon-home:before {content:“\ e6e8”; }
.icon-huiyuan1:before {content:“\ e632”; }
放到mui.css中

在mui.css中加入@ font-face {
    font-family:Muiicons;
    font-weight:normal;
    font-style:normal;
    src:url('../ fonts / iconfont.ttf' )格式('truetype');
}
第三步 在相应位置增加 class

设置自定义图片:(以九宫格为例)设置url


遇到错误1

  ./node_modules/mint-ui/lib/style.css中的错误


模块构建失败:未知单词(5:1)


  3 | //加载样式

  4 | var content = require(“!! ../../ css-loader / index.js ?? ref - 6-1!../../ postcss-loader / lib / index.js ?? ref-- 6-2 ./ style.css文件“)!;

> 5 | if(typeof content ==='string')content = [[module.id,content,'']];

    ^

  6 | if(content.locals)module.exports = content.locals;

  7 | //将样式添加到DOM

  8 | var update = require(“!../../ vue-style-loader / lib / addStylesClient.js”)(“3b24763e”,content,false,{});



 @ ./node_modules/mint-ui/lib/style.css 2:14-176 21:1-42:3 22:19-181

 @ ./src/main.js

 @ multi(webpack)-dev-server / client?http:// localhost:8080 webpack / hot / dev-server ./src/main.js



解决方法在webpack.base.conf.js中加入




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值