zoukankan      html  css  js  c++  java
  • markdown

    1.使用webpack模板。

    2.开始进行下载

     3.启动项目

     4.项目结构

    5.划分路由

    app.vue

    <template>
      <div id="app">
        <Vheader></Vheader>
    
        <router-view/>
      </div>
    </template>
    
    <script>
    import $ from 'jquery'
    import '_bootstrap@3.3.7@bootstrap/dist/css/bootstrap.min.css'
    // import 'bootstrap/dist/css/bootstrap.min.css'
    import Vheader from './components/Vheader'
    export default {
      name: 'App',
      components:{
        Vheader
      },
      created(){
        //初始化操作
      },
      mounted(){
        this.$store.commit('getAllDatas');
    
      }
    }
    </script>
    
    <style>
    
    </style>
    View Code

    main.js

    // The Vue build version to load with the `import` command
    // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    import Vue from 'vue'
    import App from './App'
    import router from './router'
    import Vuex from 'vuex'
    import $ from 'jquery'
    
    //使用elementUI
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css'
    
    Vue.use(ElementUI,{sise:'small'});
    
    Vue.use(Vuex);
    Vue.config.productionTip = false;
    
    
    
    const store = new Vuex.Store({
      state: {
        allList: [],
        note: {
          title: "",
          content: "",
          markdown: ""
        }
    
      },
      mutations: {
        getAllDatas(state) {
          var _this = this;
          // 页面加载完成才调用
          $.ajax({
            url: "http://120.78.164.247:8099/manager/category/findAllCategory",
            type: "get",
            success: function (data) {
              console.log(_this)
              state.allList = data["data"];
            }
          })
    
        },
        ADDONENOTE(state, newData) {
          state.allList=newData
        }
      },
      actions: {
        addOneNote(context,json) {
          $.ajax({
            url: "http://127.0.0.1:9527/api/comment/create",
            data: json,
            type: "post",
            success: function (data) {
              console.log(data);
              context.comit('ADDONENOTE',data)
            },
            error: function (err) {
              console.log(err)
            }
          });
    
    
        }
      }
    });
    
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      router,
      store,
      components: {App},
      template: '<App/>'
    });
    View Code

    然后使用bootstrap的一个导航条

    <template>
      <nav class="navbar navbar-inverse">
      <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Brand</a>
        </div>
    
        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav">
    
            <li v-for="(item,index) in routes" :class="{active:index}==currentIndex" @click="activeHandler(index)">
              <router-link  :to="item.url">{{item.title}}</router-link>
            </li>
    
    
    
          </ul>
          <form class="navbar-form navbar-right">
            <div class="form-group">
              <input type="text" class="form-control" placeholder="Search">
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
          </form>
    
        </div><!-- /.navbar-collapse -->
      </div><!-- /.container-fluid -->
    </nav>
    
    </template>
    <script>
        export default{
            name:'Vheader',
            data(){
                return {
                  routes:[
                    {url:'/',title:"我的首页"},
                    {url:'/note',title:"我的笔记"},
                  ],
                  currentIndex:0
    
                }
            },
          methods:{
            activeHandler(index){
              this.currentIndex = index;
            }
        },
          created(){
              console.log(this.$route.path);
            for(var i=0;i<this.routes.length;i++){
                if(this.routes[i].url == this.$route.path){
                  this.currentIndex=i;
                  return;
                }
            }
          }
        }
    </script>
    <style scoped>
    
    </style>
    View Code

    主页:

    <template>
        <div class="main">
            <div class="container">
              <div class="row">
                <div class="col-md-12">
                  <div class="panel panel-info">
                    <div class="panel-heading">
                      <h3 class="panel-title">官网首页</h3>
                    </div>
                    <div class="panel-body">
                      <ul>
                        <li><a href="">我的笔记</a></li>
                        <li><a href="http://www.cnblogs.com/geogre123/">我的博客</a></li>
                        <li><a href="#">我的公司信息</a></li>
                        <li><a href="#">我的信息</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
        </div>
    </template>
    
    <script>
        export default{
            name:'Vmain',
            data(){
                return {
    
                }
            }
        }
    </script>
    <style scoped>
    
    </style>
    View Code

    Vmark编辑器代码:

    <template>
      <div class="wrap">
          请输入文章标题<input type="text" name="" v-model="tileHandler">
        <button class="btn btn-success" @click="addOneNote">提交数据</button>
        <div class="mark">
            <textarea name="" id="" cols="45" rows="20" class="editor" v-model="markdownHandler"></textarea>
          <div class="show" v-html="currentValue" ref='t'></div>
        </div>
      </div>
    </template>
    
    <script>
      import $ from 'jquery'
      import Marked from 'marked'
    
      export default {
        name: 'Vcontent',
        data() {
          return {
            // markValue: "",
          }
        },
        computed:{
          tileHandler:{
            set:function (newValue) {
                this.$store.state.note.title=newValue;
    
            },
            get:function () {
              return this.$store.state.note.title;
            }
          },
          markdownHandler:{
            set:function (newValue) {
                this.$store.state.note.markdown=newValue;
    
            },
            get:function () {
              return this.$store.state.note.markdown;
            }
          },
          currentValue(){
            return Marked(this.markdownHandler)
          }
        },
        methods: {
          addOneNote(){
            var json={
              title:this.tileHandler,
              markdown:this.markdownHandler,
              content:this.$refs.t.innerText
            };
            //触发mutations中的方法,这个方法有局限性
            //this.$store.commit('addOneNote',json);
    
            this.$store.dispatch('addOneNote',json)
    
    
          },
    
        },
    
      }
    </script>
    
    <style>
      .mark {
        background-color: white;
        width: 850px;
        height: 600px;
        margin: 0 auto;
      }
      .editor, .show {
        float: left;
        width: 390px;
        height: 400px;
        border: 1px solid #666;
      }
    </style>
    View Code

    Vnote.vue

    <template>
      <div class="container">
        <div class="row">
    
          <div class="col-md-3">
            <div class="panel panel-danger">
              <div class="panel-heading">
                <h3 class="panel-title">我的笔记列表</h3>
              </div>
              <div class="panel-body">
                <!--笔记列表-->
                <VnoteShow></VnoteShow>
              </div>
            </div>
          </div>
    
          <div class="col=md-9 col-md-offset-3">
            <!--markdown编辑器-->
            <div class="panel panel-default">
              <div class="panel-heading">
    
              </div>
              <div class="panel-body">
                <Vmark></Vmark>
              </div>
            </div>
          </div>
        </div>
      </div>
    </template>
    <script>
      import Vmark from './Vmarke'
      import VnoteShow from './VnoteShow'
    
      export default {
        name: 'Vnote',
        data() {
          return {
    
          }
        },
        components: {
          Vmark,
          VnoteShow
        }
      }
    </script>
    <style scoped>
    
    </style>
    View Code

    剩下三个展示列表为了解耦做成三个。

    VnoteItem.vue

    <template>
          <li>
            <h2>{{data.name}}</h2>
            <p>{{data.comment}}</p>
            <!--<el-button type="primary" round>危险按钮</el-button>-->
            <VnoteBtn type="success">删除按钮</VnoteBtn>
          </li>
    </template>
    
    <script>
      import VnoteBtn from './VnoteBtn'
        export default {
            name: "vnote-item",
            data(){
              return {
    
              }
            },
            props:{
              data:Object
            },
          computed:{
    
          },
          components:{
              VnoteBtn
          }
    
        }
    </script>
    
    <style scoped>
    
    </style>
    View Code

    VnoteLIst.vue

    <template>
        <ul>
          <VnoteItem v-for='(item,index) in getAllDatas' :data="item"></VnoteItem>
        </ul>
    </template>
    
    <script>
      import VnoteItem from './VnoteItem'
        export default {
            name: "vnote-list",
            data(){
              return {
    
              }
            },
          components:{
              VnoteItem
          },
          computed:{
              getAllDatas(){
                return this.$store.state.allList;
              }
          }
        }
    </script>
    
    <style scoped>
    
    </style>
    View Code

    VnoteShow.vue

    <template>
      <VnoteList></VnoteList>
    </template>
    
    <script>
        import VnoteList from './VnoteList'
        export default {
            name: "vnote-show",
            data(){
              return {
    
              }
            },
          components:{
              VnoteList
          }
        }
    </script>
    
    <style scoped>
    
    </style>
    View Code

     项目效果:

    首页。

    编辑器页面。数据都在后台API请求。点击提交可以保存。

    可以点击删除发送删除请求,可以点击每一条数据进行编辑(未完成)

  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/geogre123/p/9781800.html
Copyright © 2011-2022 走看看