zoukankan      html  css  js  c++  java
  • 【vue】todolist小练习

    参考链接:

    http://www.imooc.com/learn/694

    http://www.cnblogs.com/Chen-XiaoJun/p/6238137.html

    http://blog.csdn.net/sinat_17775997/article/details/52536010

    ES6的写法:

    export default {
      name: 'hello',
      data () {
        return {
          msg: 'Welcome to Your Vue.js App'
        }
      }
    }

    export default 和 export 区别:

      1.export与export default均可用于导出常量、函数、文件、模块等
      2.你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用
      3.在一个文件或模块中,export、import可以有多个,export default仅有一个
      4.通过export方式导出,在导入时要加{ },export default则不需要

    1.export
    //demo1.js
    export const str = 'hello world'
    export function f(a){ return a+1}
    对应的导入方式:
    
    //demo2.js
    import { str, f } from 'demo1' //也可以分开写两次,导入的时候带花括号
    
    2.export default
    //demo1.js
    export default const str = 'hello world'
    对应的导入方式:
    
    //demo2.js
    import str from 'demo1' //导入的时候没有花括号                                                   

    html部分

    <template>
      <div id="app">
        <h1 v-text="title"></h1>
        <input v-model="newItem" @keyup.enter="addNew"/>
        <ul> 
          <li v-for="item in items" v-bind:class="{finished: item.isFinished}" v-on:click="toggleFinish(item)">
                   <span v-on:click="deleteThis(item)">delete</span>    
            {{item.label}}
            <hr/>
          </li>
        </ul>
      </div>
    </template>

    js部分

    结合localStorage和JSON将item序列化为JSON格式存储

    const STORAGE_KEY = 'todos-vuejs'//es6语法 const定义一个常量
    export default {
        fetch () {//es6语法 相当于 fetch:function(){}
            return JSON.parse(window.localStorage.getItem(STORAGE_KEY) || '[]')
        },
        save (items) {
            window.localStorage.setItem(STORAGE_KEY, JSON.stringify(items))
        }
    }

    一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。

    <script>
    import Store from './assets/js/store'
    import componentA from './components/componentA'
    //相当于module.export
    export default {
      /*function data(){
        return...
      }*/
      /*相当于var vue = new vue({data: function(){}})*/
      data () {
        return {
          title: 'TODO LIST',
          items: Store.fetch() || [],
          newItem: '',
          childWords: ''
        }
      },
      components: {
        componentA
      },
      watch: {
        items: {   //这是深度watch,监控items变化的时候,自动执行函数
          handler: function(items){
            Store.save(items)
          },
          deep: true   //也检测item内部的变化
        }
      },
      methods: {
        toggleFinish: function(item) {
          item.isFinished = !item.isFinished
        },
        addNew: function() {
          this.items.push({
            label: this.newItem,
            isFinished: false
          })
          this.newItem = ''
        },
        deleteThis: function(item) {
          this.items.splice(this.items.indexOf(item), 1)
          Store.save(this.items)
        }
      }
    }
    </script>

    CSS部分:

    <style>
    *{
      margin: 0;
      padding: 0;
    }
    html {
      height: 100%;
    }
    body {
      display: flex;
      align-items: center;
      justify-content: center;
      height: 100%;
      width: 100%;
    }
    #app {
      color: #2c3e50;
      font-family: Source Sans Pro, Helvetica, sans-serif;
      text-align: center;
      width: 60%;
    }
    #app a {
      color: #42b983;
      text-decoration: none;
    }
    #app h1:nth-child(1) {
      line-height: 3;
      position: absolute;
      top: 5%;
    }
    #app input {
      width: 60%;
      line-height: 24px;
      font-size: 24px;
      position: absolute;
      top: 25%; left: 20%;
    }
    ul {
      position: absolute;
      top: 35%;
      text-align: left;
      width: 60%;
      height: 55%;
      overflow: auto;
    }
    ul li {
      list-style: none;
      line-height: 2;
      font-size: 24px;
    }
    span {
      font-size: 16px;
      color: #fff;
      padding: 2px 5px;
      text-align: left;
      background-color: indigo;
      border-radius: 5px;
    }
    .finished {
      color: #ccc;
    }
    hr {
      border-top:1px dashed #ccc;
    }
    </style>

     最终效果

  • 相关阅读:
    十代雅阁广东车友群,雅阁广州车友群,深圳雅阁车友群,雅阁微信群、雅阁车友群、十代雅阁交流微信QQ群
    雅阁微信群、雅阁车友群、十代雅阁交流微信QQ群
    [MySQL]快速解决"Table '.sjzlfzbp_post' is marked as crashed and should be repaired"故障
    雅阁微信群、雅阁车友群、十代雅阁交流微信QQ群
    node调试工具--nodemon使用简介
    IIS7.5 URL文件名有加号或空格显示404错误的解决办法
    Mysql CPU使用率长期100%的解决思路备忘
    Windows下通过CMD命令行程序操作MySQL数据库
    软技能:十步学习法
    Linux 文件系统的基本结构
  • 原文地址:https://www.cnblogs.com/yujihang/p/6838118.html
Copyright © 2011-2022 走看看