美文网首页VueWEB前端开发技术杂谈Vue
vue入门 | 使用vue.js2.0 + ElementUI开

vue入门 | 使用vue.js2.0 + ElementUI开

作者: 小母鸡叽叽叽 | 来源:发表于2016-12-04 16:13 被阅读100181次

接上一章vue入门 | 使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)

1. 引入路由工具vue-router,切换视图

# 安装vue-router
npm install vue-router --save

2. 使用vue-router

|-- main.js
import Vue from 'vue'
import App from './App'
import VueRouter from 'vue-router'
import routeConfig from './router-config'  // 引入router-config.js文件

//加载路由中间件
Vue.use(VueRouter)

//定义路由
const router = new VueRouter({
      routes: routeConfig
})

new Vue({
  router,
  store,
  el: "#app",
  render: h => h(App)
})

3. 配置路由

在src目录下新建router-config.js,在router-cinfig.js中里面配置路由

// 引入组件
import activePublic from './page/activePublic/index.vue'

export default [
   {
        // 配置路由,当路径为'/activePublic',使用组件activePublic
        path:'/activePublic',component:activePublic,
  }
]

4. 使用路由

|--app.vue
<template>
  <div id="app">
    <!-- 头部导航 -->
    ...

    <main>
          <!-- 左侧导航 -->
        <div class="main-left">
            ...
        </div>

          <!-- 右侧主内容区 -->
          <div  class="main-right" >
              <!-- 视图 -->
              <router-view class="view"></router-view>
          </div>
    </main>
  </div>
</template>

5. 打开activePublic/index.vue文件,在页面随便写点东西,测试一下,路由是否配置成功

<template>
    <div class="activePublic ">

      <!-- element步骤组件 -->
      <el-steps :space="200" :active="step" class="step">
        <el-step title="活动信息" description=""></el-step>
        <el-step title="报名签到" description=""></el-step>
        <el-step title="分享设置" description=""></el-step>
        <el-step title="个性设置" description=""></el-step>
      </el-steps>
</template>

6. 启动项目npm run dev,看到如下页面,说明路由配置成功

step1.png

7. 接下来,在activePublic/index.vue直接调用element-ui组件,完成活动发布的首页,完成好的代码如下

  |-- activePublic/index.vue
<template>
    <div class="activePublic ">
      <!-- 步骤组件 -->
      <el-steps :space="200" :active="step" class="step">
        <el-step title="活动信息" description=""></el-step>
        <el-step title="报名签到" description=""></el-step>
        <el-step title="分享设置" description=""></el-step>
        <el-step title="个性设置" description=""></el-step>
      </el-steps>

        <!-- 视图 -->
      <router-view class="view"></router-view>

      <div class="but-group">
        <el-button >预览</el-button>
        <el-button >上一步</el-button>
        <el-button  type="primary">下一步</el-button>
        <el-button  type="primary">发布活动</el-button>
      </div>
    </div>
</template>
上面这个页面又出现了一个router-view,为什么要这样放呢?因为step1、step2、step3、step4四个页面都含有顶部的"步骤"组件,所以这里把step1/2/3/4单独提出来放在4个页面中

8. 在router-config.js文件中配置二级路由

    |-- router-config.js
import activePublic from './page/activePublic/index.vue'
<!-- 引入子页面 -->
import step1 from './page/activePublic/step1.vue'
import step2 from './page/activePublic/step2.vue'
import step3 from './page/activePublic/step3.vue'
import step4 from './page/activePublic/step4.vue'

export default [
  {
    path:'/activePublic',component:activePublic,
    // 配置子路由
    children:[
       // 路径为'/activePublic',使用组件step1
      { path: ''      , component: step1  },
       // 路径为'/activePublic/step1',使用组件step1
      { path: 'step1', component: step1  },
      // 路径为'/activePublic/step2',使用组件step2
      { path: 'step2', component: step2  },
      { path: 'step3', component: step3  },
      { path: 'step4', component: step4  }
    ]
  }
]

9. 重新启动项目cnpm run dev,在浏览器中默认路径为http://localhost:8080/#/activePublic,根据我们设置的路由规则,就会显示step1.vue页面中的内容,接着完成step1.vue,代码如下,参考element表单组件

|-- step1.vue
<template>
    //  TODO:这个页面有一个不足之处,时间选择器组件,表单验证出错,这是element组件的问题,留给大家自己去完善
    <div class="step1">
       <!-- element表单组件 -->
      <el-form :model="ruleForm" class="demo-ruleForm" :rules="rules" ref="ruleForm" label-position="top">
         <!-- 表单项,prop属性表示要进行表单验证,验证规则对应为rules的属性name -->
         <el-form-item label="活动名称" prop="name">
            <el-input v-model="ruleForm.name" size="large"></el-input>
        </el-form-item>

        <el-form-item label="" prop="fenLei">
           <!-- 改装后的表单项,在标签栏添加了一个按钮 -->
          <el-row style="height: 35px;" type="flex" align="middle">
            <el-col :span="3" style="width: 90px;">
              <div class="el-form-item__label" style="padding-bottom: 0;"> 活动分类</div>
            </el-col>
            <el-col  class="" :span="2">
              <el-button type="text" @click.native="dialogFormFenLeiVisible = true" style="margin: 0;padding: 0;">设置</el-button>
            </el-col>
          </el-row>

          <el-radio-group v-model="ruleForm.fenLei" >
            <el-radio v-for="item of ruleForm.fenLeis" :label="item.name"></el-radio>
          </el-radio-group>
        </el-form-item>

          <!-- 这里有一个坑,活动标签并不是一个表单元素,无法使用element自带的验证功能 -->
        <el-form-item label="活动标签" required>
            <el-tag
              v-for="tag in ruleForm.tags"
              :closable="true"
              type="primary"
              @close="handleClose(tag)"
               >
              {{tag.name}}
            </el-tag>
          <el-button icon="plus" size="large" @click.native="showDialog" style="vertical-align: middle;margin: 10px;"></el-button>
          <transition name="fade">
            <div class="el-form-item__error" v-show="tagsValid">{{ tagsError }}</div>
          </transition>
        </el-form-item>


        <el-form-item label="活动时间" required style="width: 750px;">
          <el-col :span="5">
            <!-- 时间选择器,表单验证时也有点坑,报错异常,建议不用element自带表单验证,自己写验证规则 -->
            <el-form-item prop="activeStartTimeDate">
              <el-date-picker
                v-model="ruleForm.activeStartTimeDate"
                type="date"
                placeholder="活动开始日期">
              </el-date-picker>
            </el-form-item>
          </el-col>

          <el-col :span="5">
            <el-form-item prop="activeStartTimeTime">
              <el-time-select
                placeholder="请选择时间点"
                v-model="ruleForm.activeStartTimeTime"
                :picker-options="{start: '00:00',step: '00:15',end: '23:45'}">
              </el-time-select>
            </el-form-item>
          </el-col>

          <el-col :span="1" style="text-align: center;">—</el-col>

          <el-col :span="5">
            <el-form-item prop="activeEndTimeDate">

              <el-date-picker
                v-model="ruleForm.activeEndTimeDate"
                type="date"
                placeholder="活动结束日期">
              </el-date-picker>
            </el-form-item>
          </el-col>

          <el-col :span="5">
            <el-form-item prop="activeEndTimeTime">
              <el-time-select
                placeholder="请选择时间点"
                v-model="ruleForm.activeEndTimeTime"
                :picker-options="{start: '00:00',step: '00:15',end: '23:45'}">
              </el-time-select>
            </el-form-item>
          </el-col>

        </el-form-item>

        <el-form-item label="报名时间" required style="width: 750px;">
          <el-col :span="5">
              <el-form-item prop="signStartTimeDate">
                <el-date-picker
                  v-model="ruleForm.signStartTimeDate"
                  type="date"
                  placeholder="报名开始日期">
                </el-date-picker>
              </el-form-item>
          </el-col>

          <el-col :span="5">
            <el-form-item prop="signStartTimeTime">
              <el-time-select
                placeholder="请选择时间点"
                v-model="ruleForm.signStartTimeTime"
                :picker-options="{start: '00:00',step: '00:15', end: '23:45'}">
              </el-time-select>
            </el-form-item>
          </el-col>

          <el-col :span="1" style="text-align: center;">—</el-col>

          <el-col :span="5">
            <el-form-item prop="signEndTimeDate">
              <el-date-picker
                v-model="ruleForm.signEndTimeDate"
                type="date"
                placeholder="报名结束日期">
              </el-date-picker>
            </el-form-item>
          </el-col>

          <el-col :span="5">
            <el-form-item prop="signEndTimeTime">
              <el-time-select
                placeholder="请选择时间点"
                v-model="ruleForm.signEndTimeTime"
                :picker-options="{start: '00:00',step: '00:15',end: '23:45'}">
              </el-time-select>
            </el-form-item>
          </el-col>
        </el-form-item>


        <el-form-item label="活动地点" required >
            <!-- 自己封装的一个二级联动地址选择器 -->
            <address-select
              :province="ruleForm.province"
              :city="ruleForm.city"
              :detail="ruleForm.detail"
              :isAddressTrue="isAddressTrue"
              ></address-select>
        </el-form-item>

        <el-form-item label="活动人数">
          <el-row>
          <el-col :span="6" style="width: 187px;">
            <el-radio class="radio" v-model="ruleForm.activePerson" label="无限制">无限制</el-radio>
            <el-radio class="radio" v-model="ruleForm.activePerson" label="限制">限制</el-radio>
          </el-col>
          <el-col :span="6">
            <el-input placeholder="0" :number="true" size="large" v-model="ruleForm.activePersonNum" :disabled=" ruleForm.activePerson == '无限制' "><template slot="append">人</template></el-input>
          </el-col>
          </el-row>
        </el-form-item>

        <el-form-item label="活动封面">
          <el-upload action="http://jsonplaceholder.typicode.com/" type="drag" :multiple="true" :on-preview="handlePreview" :on-remove="handleRemove" :on-success="handleSuccess" :on-error="handleError">
            <i class="el-icon-upload"></i>
            <div class="el-dragger__text">将文件拖到此处,或<em>点击上传</em></div>
            <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过2M</div>
          </el-upload>
        </el-form-item>

        <el-form-item label="活动简介">
            <el-input
              type="textarea"
              placeholder="请输入内容"
              :autosize="{minRows: 4, maxRows: 8}"
              v-model="ruleForm.activeDescribe">
            </el-input>
        </el-form-item>

        <el-form-item label="报名用户信息展示">
          <el-radio-group v-model="ruleForm.UseMsgShow">
            <el-radio label="不展示"></el-radio>
            <el-radio label="展示报名人数"></el-radio>
            <el-radio label="展示报名清单"></el-radio>
            <el-radio label="报名成功显示完整用户资料"></el-radio>
          </el-radio-group>
        </el-form-item>

        <el-form-item label="评价功能">
          <el-radio-group v-model="ruleForm.evaluate">
            <el-radio  label="不开启"></el-radio>
            <el-radio  label="实时评价"></el-radio>
            <el-radio  label="审核后评论"></el-radio>
          </el-radio-group>
        </el-form-item>

        <el-form-item label="">
          <el-row>
            <div class="el-form-item__label"> 赞助广告</div>
            <el-col  class="el-form-item__label is-active" :span="2">
              <el-button type="text" @click.native="openAd">开通赞助广告</el-button>
            </el-col>
          </el-row>
          <el-upload action="http://jsonplaceholder.typicode.com/" type="drag" :multiple="true" :on-preview="handlePreview" :on-remove="handleRemove" :on-success="handleSuccess" :on-error="handleError">
            <i class="el-icon-upload"></i>
            <div class="el-dragger__text">将文件拖到此处,或<em>点击上传</em></div>
            <div class="el-upload__tip" slot="tip">图片尺寸建议比例1;4.18,如160*666像素,且不超过2M</div>
          </el-upload>
        </el-form-item>

        <el-form-item>
          <el-input
            placeholder="请填写您的广告标题"
            size="large"
            v-model="ruleForm.adTitle">
          </el-input>
        </el-form-item>

        <el-form-item>
        <el-input
            placeholder="请填写您的广告内容"
            size="large"
            v-model="ruleForm.adContent">
          </el-input>
        </el-form-item>

        <el-form-item >
          <el-input
            placeholder="请填写您的赞助链接"
            size="large"
            v-model="ruleForm.adLink">
          </el-input>
        </el-form-item>

        </el-form>

      <!-- 弹框 -->
      <el-dialog title="添加活动标签"  v-model="dialogFormVisible" top="35%">
        <el-form :model="dialogForm">
          <el-form-item>
            <el-input v-model="dialogForm.name" auto-complete="off" ></el-input>
          </el-form-item>
        </el-form>
                <span slot="footer" class="dialog-footer">
                    <el-button @click.native="dialogFormVisible = false">取 消</el-button>
                    <el-button type="primary"  @click.native="handleAdd(dialogForm.name,dialogForm,ruleForm.tags)">添加</el-button>
                </span>
      </el-dialog>

      <!-- 设置活动分类 -->
      <el-dialog title="设置活动分类" v-model="dialogFormFenLeiVisible" >
        <el-form :model="dialogFormFenLei">
          <el-form-item>
            <el-tag
              v-for="feiLei of ruleForm.fenLeis"
              :closable="true"
              type="primary"
              @close="handleCloseFenLei(feiLei)"
              >
              {{ feiLei.name }}
            </el-tag>
          </el-form-item>
          <el-form-item>
            <el-input v-model="dialogFormFenLei.name" auto-complete="off" ></el-input>
          </el-form-item>
        </el-form>
        <span slot="footer" class="dialog-footer">
          <el-button @click.native="dialogFormFenLeiVisible = false">取 消</el-button>
          <el-button type="primary"  @click.native="handleAdd(dialogFormFenLei.name,dialogFormFenLei,ruleForm.fenLeis)">添加</el-button>
        </span>
      </el-dialog>
    </div>
</template>
<script>
  // 地址选择器组件
  import addressSelect from 'src/components/address.vue'

  export default {
    name:'step1',
    // 组件
    components: {
      'address-select' : addressSelect
    },
    data: function () {
      return {
        tagsValid:false,                // 活动标签是否合法
        tagsError:'请设置标签',         // 活动标签不合法的提示信息
        isAddressTrue:false,            // 地址是否正确
        dialogFormVisible: false,       // 添加活动标签的对话框可见?
        dialogFormFenLeiVisible:false,  // 分类对话框可见?
        dialogForm:{name:''},           // 活动标签对话框表单
        dialogFormFenLei:{name:''},     // 活动分类对话框表单
        ruleFormChange:false,           //  ruleForm表单是否改变?
        ruleFormValid:false,            //  ruleForm是否合法?
        rules: {                        // 表单验证规则
          name:[
            {required:true,message:'请输入活动名称',trigger:'change'}
          ],
          fenLei:[
            {required:true,message:'请选择活动分类',trigger:'change'}
          ],
          activeStartTimeDate: [{required:true,message:'请选择活动开始日期',trigger:'change'}],
          activeStartTimeTime: [{required:true,message:'请选择活动开始时间',trigger:'change'}],
          activeEndTimeDate:   [{required:true,message:'请选择活动结束日期',trigger:'change'}],
          activeEndTimeTime:   [{required:true,message:'请选择活动结束时间',trigger:'change'}],
          signStartTimeDate:   [{required:true,message:'请选择报名开始日期',trigger:'change'}],
          signStartTimeTime:   [{required:true,message:'请选择报名开始时间',trigger:'change'}],
          signEndTimeDate:     [{required:true,message:'请选择报名截止日期',trigger:'change'}],
          signEndTimeTime:     [{required:true,message:'请选择报名截止时间',trigger:'change'}],
        },
        ruleForm: {         // step1页面的表单,记录页面所有表单信息
          name: '',         // 活动名称
          fenLeis:[         // 活动分类选项
            {name: '未发布'},
            {name: '测试活动'},
            {name: '精彩活动'}
          ],
          fenLei: '',       // 当前选中的活动分类
          tags: [],         // 活动标签
          activeStartTimeDate: '',  // 活动开始时间
          activeStartTimeTime: '',  // 活动结束时间
          activeEndTimeDate: '',
          activeEndTimeTime: '',
          signStartTimeDate: '',
          signStartTimeTime: '',
          signEndTimeDate: '',
          signEndTimeTime: '',
          activePerson:'',             // 是否限制活动人数?
          activePersonNum:'',          // 限制多少人?
          activeDescribe:'',           // 活动简介
          UseMsgShow:'',               // 报名活动信息展示
          evaluate:'',                 // 评价功能
          adTitle:'',                  // 广告标题
          adContent:'',                // 广告内容
          adLink:'',                   // 赞助链接
        }
      };
    },
    watch: {    // 监控
      ruleForm: {
        handler: function (val,oldVal) {
          store.commit('setRuleForm',this.ruleForm);
          this.tagsValid = !this.ruleForm.tags.length ? '' :false ;
          this.ruleFormChange = true ;
        },
        deep: true // 深度监控,可以观察到ruleForm内任意属性的变化
      }
    },
    methods: {

      handleRemove: function (file, fileList) {
        console.log(file, fileList);
      },
      handlePreview: function (file) {
        console.log(file);
      },
      handleSuccess: function () {
      },
      handleError: function () {
      },
      // 显示添加活动标签对话框
      showDialog: function () {
        if(this.ruleForm.tags.length >=5 ){
          this.$message({
            message: '最多设置5个标签',
            type: 'warning'
          });
        }else{
          this.dialogFormVisible = true;
          this.dialogForm = {};
        }
      },
      // 删除活动标签
      handleClose: function (tag) {
        var index = this.ruleForm.tags.indexOf(tag);
        this.ruleForm.tags.splice(index,1);
      },
      // 删除活动分类的某一项
      handleCloseFenLei: function (fenLei){
        var index = this.ruleForm.fenLeis.indexOf(fenLei);
        this.ruleForm.fenLeis.splice(index,1);
      },
      // 添加标签
      handleAdd: function (tag,form,tags) {
        if(tag && tag.trim().length !== 0){
          var isExist = false ;
          tag = tag.trim();
          for(var i=0;i<tags.length; i++){
            if(tags[i].name == tag ){
              isExist = true;
              break
            }
          }
          if(isExist){
            this.$message({
              message: '该标签已存在',
              type: 'warning'
            });
          }else{
            this.dialogFormVisible = false;
            this.dialogFormFenLeiVisible = false;
            tags.push({
              name: tag
            });
          }
        }else{
          this.$message({
            message: '标签不能为空',
            type: 'warning'
          });
        }
      },
      openAd: function (){
        this.$message('该功能正在完善');
      },

    },
    // 页面初始化
    created: function(){

    }
  }
</script>
<style>
    .step{margin-bottom: 30px;}
    .step1 .demo-ruleForm .el-form-item{margin-bottom: 25px;margin-right: 50px;}

    .step1 .el-form-item.is-required .el-form-item__label:after {
      content: '*';
      color: #ff4949;
      margin-right: 4px;
    }
    .step1 .el-form-item.is-required .el-form-item__label:before { display: none; }
    /* 标签 */
    .step1   .el-tag{padding: 10px 15px;margin:10px;vertical-align: middle;}
    .step1   .el-tag:first-child{margin-left: 0;}

    /* 对话框 */
    .step1 .el-dialog--small{width: 564px;}
    .step1 .el-dialog__body{padding-bottom: 0;}
    .step1 .el-dialog__body .el-form-item{margin-bottom: 10px;}
    .step1 .el-dialog__wrapper  .el-button{margin-left: 15px;}


   /* 时间选择器 */
    .step1 .el-date-editor{width:150px;}

    .step1 .el-form-item .router-link{color:#fff;}
    .el-form-item__error{white-space: nowrap;}
</style>
这个页面的大部分是使用的element组件,请自行对照官网实现。在这个页面中封装了一个二级地址选择插件,稍后会专门写一篇文章,详细介绍如何封装组件,先为大家奉上地址选择器源码

10. 重新启动项目,npm run dev,检查页面上的功能是否都已经实现,是否有报错,如果有解决不了的bug,欢迎留言咨询。

演示 (1).gif

相关文章

网友评论

  • _狒狒君:自学vuejs中,看完文档之后也想实战做项目,但是苦于不知道从什么地方下手~~~:sob:
  • 6950bc36232a:我点击下一步时,右侧的页面变全白了,上边的step组件都不见了,这个大概是个什么呢,有没有人遇到过同样的问题啊,想不明白是怎么回事了
  • 前端拾遗者:5. 打开activePublic/index.vue文件,在页面随便写点东西,测试一下,路由是否配置成功
    这一步的div少了个闭合标签,居然没人发现吗?
    找了半天的我。。。
  • 1686dd0e0193:我是动态添加的step,用的v-for对应数组,往数组添加元素这样,但我删除了一个步骤,再添加步骤的时候,图标数字显示不准确(例如,我添加了1、2、3三个步骤,我删除第三个步骤再添加一个的时候,添加的是步骤4)
  • 2ee2a68516a9:请问 在“下一步”这个按钮上,怎么写才能正常跳转到别的页面上
    36fd9078dd99:我的跳转过去没有把url参数传过去
  • 0031a00dab7a:为啥我按照你的教程编写,store.js无法引入成功,但是下载你的项目却可以?
  • 7ddf919bbe84:楼主,头部导航木有设置路由,你这个是不是不完整,只是简单的展示可以自己添加吗?
    小母鸡叽叽叽:@菜鸟itnan 头部导航只是简单的展示
  • 0009dfc388b8:楼主的文章好棒,自己按照楼主的步骤一步一步居然把整个项目搭建起来了,感觉vue没有那么难学嘛~~ 哈哈
  • 29283024e980:当刷新页面的时候<router-view>中的内容没问题,但是导航菜单的状态会回到初始状态,这样就不对了
  • 刘国富:您好,
    <el-container>
    <el-header>Header</el-header>
    <el-main>Main</el-main>
    </el-container>
    我添加了一个这个标签,这个是eleUi官网的页面,
    然后就报错啦
    <el-container> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
    说我这个标签不对,想问一下怎么解决
  • 95487b256f20:没太懂最后提交的时候,,每一个step的数据怎么处理的,谢谢
    小母鸡叽叽叽:@chiuwingyan 将新添加的数据保存到后数据库后,应该重新调接口请求表格数据
    9eb8f128096e:@拯救地球一号 就是如果类似于给一个表格添加信息,点击新增弹出一个弹窗,填完信息提交请求接口新增到数据库,如果请求成功我是在这个表格组件这里触发一个事件重新请求数据从而更新显示的数据吗?一般是这样子做吗
    小母鸡叽叽叽:@SunshineX_385a 每一个step的数据保存在store中,看产品的需求吧。一般是每一步提交,都应该调一次后台接口,将数据保存在后台,前端不做数据的保存
  • 刘员外__:朋友,我按照elementUI官网的按需加载步骤加载后,就报错了,应该是组件加载错误!请问你是完全按照官网加载的吗?
    刘国富:@刘飞_ 您好 我想问问是哪里少了呢.我这边添加组件也是显示错误
    刘员外__:@拯救地球一号 已经解决了,谢谢,是少了一些loader
    小母鸡叽叽叽:@刘飞_ element-ui现在已经升级到2.0了,我写这个dom的时候,是用的1.x的版本,你查看element-ui 1.x的文档再试试
  • 7ab3fe358538:就两节课吗?
  • 58b6a8b46dc4:楼主,我的都是[Vue warn]: Property or method "form" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
    报错
  • 74621a66ad84:楼主能不能出个教程(三)说一下活动管理部分啊,感激
  • 53075ca5daa5:谢谢楼主分享,刚开始学习Vue2.0+element,很不错的例子!:heart: :relaxed:
    小母鸡叽叽叽:@药石无医_cf65 加油
  • 8d6918cce1f8:楼主,你好,想咨询一下关于上传附件这块的功能,我看您的代码上传附件(活动封面)之后,直接上传到服务器(http://jsonplaceholder.typicode.com/)了,是否有方法可以配合别的选择的参数一起上传上去到服务器呢?
    8d6918cce1f8:@拯救地球一号 哈哈,谢谢哈,我也是查到这个文档解决问题的,thankQ
    小母鸡叽叽叽:@yuejer 很容易,http://element.eleme.io/#/zh-CN/component/upload
  • 爱圣女果的番茄:它右边的内容里不能放element的布局格式么?就是el-row
    小母鸡叽叽叽:@爱圣女果的番茄 可以啊,布局是纯css的内容
  • 7c88485a23d1:博主,你的地址选择器是二级的,要是想要添加成三级要怎么搞吖。那个address.vue使用的数据addressData.js是三级的吖,省市区。但是不知道address.vue里面要怎么修改。网上都给数据写成json且设置了level。如果是博主这种方法要怎么修改呢?
  • b45f749f359b:首先感谢楼主,案例基本上能正常跑了,但是目前遇到了路由部分的疑问,在使用浏览器前进后退的时候,页面是跟着路由渲染的,但是menu和step组件的状态没有同步更新。
    b45f749f359b:@拯救地球好累丫 实不相瞒,我学着用iview重构了一个(https://github.com/Leega0/iview2-management-system):sweat_smile:
    小母鸡叽叽叽: @小逝水 你观察得真仔细,这方面的细节确实没做好
  • d62deedbd7c0:vuex那部分没讲有点可惜,
    还有store.js这个带带路。
    总的来说,非常感谢作者
    小母鸡叽叽叽:@cn_alex vuex可以看一下官方文档,上手还是比较容易的,加油
  • BillGrim:你好,楼主。我在vue项目中引入ElementUI官网的自定义Dialog组件的demo后,点击按钮并不能弹出dialog。我的页面代码如下:
    <template>
    <div>
    <!-- Table -->
    <el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>

    <el-dialog title="收货地址" :visible.sync="dialogTableVisible">
    <el-table :data="gridData">
    <el-table-column property="date" label="日期" width="150"></el-table-column>
    <el-table-column property="name" label="姓名" width="200"></el-table-column>
    <el-table-column property="address" label="地址"></el-table-column>
    </el-table>
    </el-dialog>

    <!-- Form -->
    <el-button type="text" @click="dialogFormVisible = true">打开嵌套表单的 Dialog</el-button>

    <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
    <el-form :model="form">
    <el-form-item label="活动名称" :label-width="formLabelWidth">
    <el-input v-model="form.name" auto-complete="off"></el-input>
    </el-form-item>
    <el-form-item label="活动区域" :label-width="formLabelWidth">
    <el-select v-model="form.region" placeholder="请选择活动区域">
    <el-option label="区域一" value="shanghai"></el-option>
    <el-option label="区域二" value="beijing"></el-option>
    </el-select>
    </el-form-item>
    </el-form>
    <div slot="footer" class="dialog-footer">
    <el-button @click="dialogFormVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
    </div>
    </el-dialog>
    </div>
    </template>
    小母鸡叽叽叽:@君子_7a1a da打开控制台,看是否有报错
    BillGrim:
    <script>
    export default {
    data() {
    return {
    gridData: [{
    date: '2016-05-02',
    name: '王小虎',
    address: '上海市普陀区金沙江路 1518 弄'
    }, {
    date: '2016-05-04',
    name: '王小虎',
    address: '上海市普陀区金沙江路 1518 弄'
    }, {
    date: '2016-05-01',
    name: '王小虎',
    address: '上海市普陀区金沙江路 1518 弄'
    }, {
    date: '2016-05-03',
    name: '王小虎',
    address: '上海市普陀区金沙江路 1518 弄'
    }],
    dialogTableVisible: false,
    dialogFormVisible: false,
    form: {
    name: '',
    region: '',
    date1: '',
    date2: '',
    delivery: false,
    type: [],
    resource: '',
    desc: ''
    },
    formLabelWidth: '120px'
    };
    }
    };
    </script>

    请问是什么原因导致dialog弹出失败?
  • aec820befa56:大神能不能把这篇博文代码更新一下 vue 和 element-ui都更新了
    aec820befa56:@拯救地球好累丫 太棒了
    小母鸡叽叽叽:@原谅我一生不羁放歌搞文艺 已更新
    小母鸡叽叽叽:@原谅我一生不羁放歌搞文艺 好的,过几天更新一下
  • dc55d969c962:多亏了你的分享我了解一些element,只是可惜导入导出没有写
    dc55d969c962:而且貌似省市区的组件有一点点问题,就是step页面获得不到选中的省市区的值
  • a8b36a7ad8d1:感谢分享,学到很多:smile:
    小母鸡叽叽叽:好的,加油
  • 8292d0273822:大神,如果我想用webpack分开打包每一个模块的话,这个要怎么改啊,跪求啊
    小母鸡叽叽叽: @Kelvin_9609 网上有很多例子,但是多页面开发不能热更新,不能使用vue-router
  • 哈叽哈叽叽歪歪:这是单页应用,能做成多页应用吗?
    小母鸡叽叽叽: @wu7zhi 最近我也在研究这个问题,用这个框架做成多页面了就不支持热更新了,网上的多页面开发框架都有这个问题
  • 可爱壳:感谢分享~~~~正好想用级联列表,我差点就想用原声js来写了,看到了你的分享,瞬间思路豁然开朗。大赞~~~~
    小母鸡叽叽叽: @浅浅长歌 加油
  • d9fda9baa7b8:6. 启动项目cnpm run dev,看到如下页面,说明路由配置成功 到了这一步以后 不报错 都是页面没有东西 大概是什么原因
    小母鸡叽叽叽: @OnCTO 原因有很多,你自己琢磨琢磨
  • 066335565335:楼主 我遇到一个奇葩问题,项目启动没问题,但是我单独起一个项目引入<el-button type="text">文字按钮</el-button>就会比原来的按钮大得多,就像放大版一样
    小母鸡叽叽叽: @怼心 那应该是element版本的问题,自己写一个全局样式,覆盖掉默认的按钮大小就可以了
    066335565335:@拯救地球好累丫 这个属性是可以的,但是我的就是相同设置,开发的时候就比文档里的按钮大,同一个浏览器,同样的分辨率,我也懵逼了
    小母鸡叽叽叽:@怼心 给这个button设置一个size属性为small试一下
  • 最怕认真:Electron很不错,就是包大的惊人,如果能得到操作系统的支持就碉堡了
  • 我是菜鸟一只:很不错了解技术的好文
  • 69f88776ba03:第五步在run以后没报错但是页面一片空白,之前的首页成功的
  • 3f24d11ca479:render会显示unused property render,这是什么原因呢?
    小母鸡叽叽叽: @對_4a1f 可能是时间组件的选中事件不对,请看官方文档的时间组件
    3f24d11ca479:@拯救地球好累丫 时间选中不能显示是什么原因呢?
    小母鸡叽叽叽:@對_4a1f 截个图给我看一下
  • a2dea843dc0e:楼主你不更新了???
    小母鸡叽叽叽: @王国丞_50fe 不更新了,后面的内容跟前面差不多
  • 939a2fec8955:谢谢楼主,写的真好
    小母鸡叽叽叽:@慢慢心变成铁_bbbe 谢谢支持
  • a2dea843dc0e:楼主大神 能不能截图 从第一步开始呀 出现各种问题,这个问题解决,下个问题又出现了。心碎💔,心累。
    小母鸡叽叽叽: @王国丞_50fe 你的node.js是什么版本的
    小母鸡叽叽叽:@王国丞_50fe 这个很难做到
  • a2dea843dc0e:D:\myproject>npm run dev

    > myproject@1.0.0 dev D:\myproject
    > node build/dev-server.js



    ERROR Failed to compile with 2 errors 22:40:53


    These dependencies were not found:

    * jquery in ./~/babel-loader/lib!./~/vue-loader/lib/selector.js?type=script&inde
    x=0!./src/page/activePublic/index.vue
    * src/store.js in ./~/babel-loader/lib!./~/vue-loader/lib/selector.js?type=scrip
    t&index=0!./src/page/activePublic/index.vue

    To install them, you can run: npm install --save jquery src/store.js
    > Listening at http://localhost:8080


    这个是入门(二) 执行6部分的时候 报的错,求解。是什么原因呀
    a2dea843dc0e: @拯救地球好累丫 路径怎么写,再找上一级目录,还是上二级目录
    小母鸡叽叽叽:@王国丞_50fe 1、引入store.js时,路径有点问题 2、手动安装一下jquery ```npm install jquery --save```
    a2dea843dc0e:知道的,亲,请回复一下,不胜感激!
  • 后端云技术分享:作者也在大学城超谷科技园?
    dc55d969c962:有导入导出就好了
    后端云技术分享:@拯救地球好累丫 我现在还在这边工作。
    小母鸡叽叽叽:@微信小程序开发 之前在那里工作过
  • 0c275dc2f684:配置二级路由之后,报以下错误是什么原因呀?新手,望大神不吝赐教
    ERROR Failed to compile with 4 errors 09:25:31

    These dependencies were not found:

    * src/store.js in ./~/.6.4.1@babel-loader/lib!./~/.11.1.4@vue-loader/lib/selector.js?type=script&index=0!./src/page/activePublic/step2.vue, ./~/.6.4.1@babel-loader/lib!./~/.11.1.4@vue-loader/lib/selector.js?type=script&index=0!./src/page/activePublic/step4.vue and 1 other
    * src/components/address.vue in ./~/.6.4.1@babel-loader/lib!./~/.11.1.4@vue-loader/lib/selector.js?type=script&index=0!./src/page/activePublic/step1.vue

    To install them, you can run: npm install --save src/store.js src/components/address.vue
    0c275dc2f684:@拯救地球好累丫 存在的,我从下载的源码里拷过去的,但就是报错说找不到,store.js也是
    c20d36a2ae39:活动管理自路径怎么实现的?代码里,本地没反应
    小母鸡叽叽叽:@xiaoxiaoyeah address.vue没有找到,看一下src/components/address.vue文件是否存在
  • a2dea843dc0e:楼主大神,左侧如果变成二级下拉菜单怎么做呀?如果是二级下拉菜单,我请求数据应该怎么写
    小母鸡叽叽叽:@王国丞_50fe element-ui官网有二级菜单的例子,你可以[参考](http://element.eleme.io/#/zh-CN/component/menu)一下
  • cbe54408ffc9:ERROR Failed to compile with 1 errors

    error in ./src/main.js

    Module build failed: F:/case/vue-demo/my-project/src/main.js: Duplicate declarat
    ion "router"

    15 |
    16 | //定义路由
    > 17 | const router = new VueRouter({
    | ^
    18 | routes: routeConfig
    19 | })
    20 |


    @ multi ./build/dev-client ./src/main.

    大神,又报错了:joy: 这个又是啥问题
    小母鸡叽叽叽: @诺_8b06 先去掉vue-router和vue的尖角试一下,我这个项目写得比较早,很多包的版本比较旧,用最新的版本肯定会不兼容
    cbe54408ffc9:@拯救地球好累丫 所有的尖角号?
    小母鸡叽叽叽:@诺_8b06 路由重复定义,如果你没改过页面的代码的话,那就是包的版本的问题,把package.json文件里面的尖角号去掉'^',然后删掉node_modules文件夹,重新安装一下
  • 6f608858cb10:楼主。我配置路由的时候报错 : __WEBPACK_IMPORTED_MODULE_2__router__.a is not a constructor 不知道是什么原因引起的? 望不吝解答,谢谢!
    小母鸡叽叽叽: @BLEEDKAGA 嗯,好的
    6f608858cb10:@拯救地球好累丫 谢谢啊,检查了下版本,1.13.2的 现在升级成2.2.1了
    小母鸡叽叽叽: @BLEEDKAGA 查看一下你的webpack的版本,是不是安装成了wevpack1
  • c8e89a7f3f8d:Uncaught ReferenceError: store is not defined
    37f3e89f6c1f:我的也是,完全按照步骤来的
    小母鸡叽叽叽: @c8e89a7f3f8d 请检查vue和element-ui包的版本,是否和我的例子是一致的
  • c8e89a7f3f8d:store 报错
  • 4698c0ea5120:楼主你这个demo有问题,在线的这个,当切换tab,再用浏览器返回的时候标签选中的是page2,但是内容是page3,代码好像缺一个对于当前路由的判断而切换样式的方法
    小母鸡叽叽叽: @Vanshment 你研究得真仔细,我这个例子离正式上线还差得远,还有很多地方需要完善
    4698c0ea5120:@拯救地球好累丫 /(ㄒoㄒ)/~~正在找哪里有问题。。😭好累
    小母鸡叽叽叽: @Vanshment 谢谢提醒,这一块当时没有写好,有点错乱
  • 4698c0ea5120:element里面函数变了,改成这样就行了
    routerTo: function (tab,event) {
    var val = tab.index + 1;
    console.log(val);
    this.$router.push('/base/detail/page'+val);
    },
  • 4698c0ea5120:楼主,我clone下来你的代码。run以后,活动管理里的查看详情并不能正常使用,点击完全没反应,请问是怎么回事
    4698c0ea5120:已解决!cellclick变成了cell-click
    4698c0ea5120:@拯救地球好累丫 好的我去试一下
    小母鸡叽叽叽: @Vanshment element版本问题,表格组件属性升级了,两种解决方法,1.把element的版本和我的一样,2.修改页面代码
  • WEB_克克:
    <el-tabs @tab-click="routerTo" class="tab">
    <el-tab-pane label="活动详情"></el-tab-pane>
    <el-tab-pane label="报名管理"></el-tab-pane>
    <el-tab-pane label="签到"></el-tab-pane>
    <el-tab-pane label="数据统计"></el-tab-pane>
    <el-tab-pane label="评价管理"></el-tab-pane>
    </el-tabs>

    this.$router.push('/activeManage/detail/page'+val);
    最后面的 val 有问题, 点击切换的时候 val 出来的不是数字,是一个【opject opject】 ,这样的话就找不到页面了
    小母鸡叽叽叽: @野马VC 妹子UI
    6ecb23b10fa7:不错,还有什么推荐的vue组件库
    小母鸡叽叽叽: @陈克 可能是element和vue版本的问题,vue更新得太快了
  • e01edda0af05: 真心感谢!假如能细说就更好了。:kissing_heart:
    小母鸡叽叽叽: @陈克 可以这样传参
    WEB_克克:@拯救地球好累丫 传参数这一块,比如 父组件给子组件传了一个json过去,子组件能得到,然后子组件里面可以遍历这个对象。
    小母鸡叽叽叽: @半隻饅頭 哪些内容需要细说呢?举个例子?
  • 4698c0ea5120:很不错
    WEB_克克:http://localhost:8080/#/activeManage/detail/page [object Object] 点击tab切换的时候,最后就会出来一个 [object Object]为什么啊,
    小母鸡叽叽叽: @Vanshment 谢谢
  • 37c7a6e9af64:为什么 你的源码下载了覆盖到我的项目 npm run dev就报错了
    小母鸡叽叽叽:@阿辰2004 好的,感谢留言
    37c7a6e9af64:@拯救地球好累丫 解决了 感谢
    小母鸡叽叽叽: @阿辰2004 可以先看一下你的node.js和npm和cnpm的版本,是不是最新的,然后确保你的vue是2.1.6版本的,elemenet-ui是1.0.9版的
  • c67cce797d61:楼主,您的文章很有参考价值,源码能否分享一下,谢谢!
    c67cce797d61:@拯救地球好累丫 不好意思,没注意看到,谢谢了!
    小母鸡叽叽叽: @公孙睿 谢谢,源码在文章开头就已经给了,点击链接就可以了

本文标题:vue入门 | 使用vue.js2.0 + ElementUI开

本文链接:https://www.haomeiwen.com/subject/mpuhmttx.html