美文网首页
vue 构建单页应用3

vue 构建单页应用3

作者: 那就远走 | 来源:发表于2018-06-08 18:58 被阅读13次

事件调用方法时传递参数

  • 代码
# template
<!-- methods 传递参数的两种方法 -->
<button v-on:click="showParam1('我是参数1')">点我显示参数1</button>
<button data-param="我是参数2" @click="showParam2($event)">点我显示参数2</button>

# script
...
methods: {
    // 直接传参
    showParam1(str) {
        alert(str);
    },
    // 传递过来一个 事件对象 通过该对象获取参数
    showParam2(e) {
        console.log(e.srcElement.dataset.param);
    }
}
  • v-on:事件="调用方法(参数列表)" 可以简写为 @事件="方法(参数)"
  • 第一种方法是直接传递参数。
  • 第二种方法是传递 $event => 即触发事件的对象作为参数,并且在标签上使用 data-参数名 来配置参数。
  • 然后在方法参数列表中接收 $event ,然后通过 接收的event.srcElement.dataset.参数名 来实现读取标签上配置的参数。

第二种方法用于无法直接传参的情况。

创建新的初始化文件

  • 使用 vue create projectName vue-cli 创建新项目时,会让你选择一种初始化版本:
    • default => 带 babel, esLint
    • Manually select features => 自己选包
  • 选择 Manully => 【空格】选取创建项目时就自动带上的包,选好后【回车】,然后可以选择 Indedicated config files 输入一个名字,就可以再下次使用 vue-cli 创建项目时,选择通过这样的方式保存的预置配置了。

构建一个简单的“代办事项”

  • 增加、删除、遍历
# template

<!-- 文本框 -->
<input type="text" v-model="todo">
<!-- 添加按钮 -->
<button @click="add()">增加</button>
<hr>
<!-- 遍历数据 -->
<ul class="list">
    <!-- 使用 v-for="(单个对象, 该对象在集合中的下标)" 在循环中利用下标实现删除 -->
    <li v-for="(thing, key) of things" :key="thing.id"> {{ thing.id }} - {{ thing.todo }} <button @click="remove(key)">删除</button> </li>
</ul>

# script
export default {
  name: 'app',
  data() {
    return {
      todo: '', //文本框
      // 这是代办事项集合
      things: [
        {id: 1, todo: '请输入代办事项'},
      ],
    }
  },
  methods: {
    // 添加
    add() {
      // 先获得id
      var id = this.things.length;
      // 然后获取文本框能容
      var todo = this.todo;
      // 组装成和 things 中的每一项一样的格式(ES6语法, key: value 标识符是一样的时候,可以只写其中一个)
      var newThing = {id, todo};
      // 最后使用 push() 将新数据放进 this.things 中。
      this.things.push(newThing);
    },

    // 删除
    remove(key) {
      // 使用 splice(开始下标, 往后删除几个) 来删除数据 
      this.things.splice(key, 1);
    },
  }
}
  • 增加删除都使用 JS 提供的数组操作, push(在数组末尾添加的新元素值) & splice(从哪里开始删除的下标, 删除个数)
  • 在模板上遍历显示对象集合(数组)时,可以通过 v-for="(obj, index) of objs" 中的 index 来获取下标。

  • 完成后勾选功能的实现
# 修改 template
<ul class="list">
  <h2>代办</h2>
  <li v-for="(thing, key) of things" :key="thing.id" v-if="!thing.status">
      <input type="checkbox" v-model="thing.status">
      {{ thing.id }} - {{ thing.todo }} 
      <button @click="remove(key)">删除</button>
  </li>
  <hr>
  <h2>完成</h2>
  <li v-for="(thing, key) of things" :key="thing.id" v-if="thing.status" class="active">
      <input type="checkbox" v-model="thing.status">
      {{ thing.id }} - {{ thing.todo }} 
      <button @click="remove(key)">删除</button>
  </li>
</ul>

# 数据定义改一下
things: [
  {id: 0, todo: '请输入代办事项', status: false},
],  
  • 上面实现了修改 thing.status 的功能:使用 <input type="checkbox" v-model="thing.status"> 绑定当前被遍历事件的状态值,当勾选时,该值为 true。
  • 使用 v-if 来控制页面上元素的显示和隐藏。

  • 使用 localStorage 实现存储本地事件

    1. 新建 /src/module/storage.js
    /**
    * localStorage 封装
    */
    
    // 设置一个带有 set() 和 get() 方法的对象
    var storage = {
        // 设置
        set(key, value) {
            localStorage.setItem(key, JSON.stringify(value));
        },
    
        // 读取
        get(key) {
            return JSON.parse(localStorage.getItem(key));
        },
    }
    
    // 并包路这个对象
    export default storage;
    

    JSON.stringify(对象) => 对象转JSON字符串, JSON.parse(字符串) => 字符串转对象。

    1. 在 /src/App.vue 根组件中引用上面代码定义和暴露的模块
    // 引用对象
    import storage from "./module/storage";
    // console.log(storage);
    
    1. 在 添加,删除,清空三个方法中添加这样一句代码 storage.set('things', this.things); => 调用引用的 storage 对象的set() 方法。
    2. 使用 生命周期函数 mounted(): 当组件被挂载完成后自动调用,当页面刷新时读取存储在 localStorage 中的代办事项数据
    // 初始化函数
    mounted() {
      var things = storage.get('things');
      if(things) {
        this.things = things;
      }
    }
    
    1. 解决一个无法正确读取状态的问题:因为我们的“开关” <input type="checkbox" v-model="thing.status"> 在改变时没有进行 localstorage 的存储,所以需要在标签上添加一个被修改时触发的事件 @chage="saveStatus()" ,然后在 methods 里定义一个 saveStatus() 函数,调用 storage.set('things', this.things); 存储即可。

上面的知识用了 nodeJS 提供的模块化思想:定义并且使用 export 暴露某个对象。然后在其他文件使用 import 引用一些被暴露的对象。实现对象分类封装。

相关文章

  • vue 构建单页应用3

    事件调用方法时传递参数 代码 v-on:事件="调用方法(参数列表)" 可以简写为 @事件="方法(参数)" 第一...

  • Vue-cli基础梳理

    Vue-cli是vue官方出品的快速构建单页应用的脚手架。 1.vue-cli项目目录结构 build项目构建(w...

  • 2016/12/06

    技术 vue-router2.0设置title Vue 2.0 构建单页应用最佳实战 如何得到oracle数据库中...

  • (Vue全家桶)Vue-cli

    Vue-cli Vue-cli是vue官方出品的快速构建单页应用的脚手架 安装vue-cli 安装vue-cli的...

  • vue-router 使用与原理分析

    简介 Vue Router 是Vue.js的官方路由。与Vue.js核心深度集成,让用Vue.js构建单页应用(S...

  • Vue.js状态管理工具Vuex快速上手

    Vue2简单入门 Vue.js再入门 Vue.js使用vue-router构建单页应用 Vue.js状态管理工具V...

  • Vue2简单入门

    Vue2简单入门 Vue.js再入门 Vue.js使用vue-router构建单页应用 Vue.js状态管理工具V...

  • Vue.js再入门

    Vue2简单入门 Vue.js再入门 Vue.js使用vue-router构建单页应用 Vue.js状态管理工具V...

  • Vue.js使用vue-router构建单页应用

    Vue2简单入门 Vue.js再入门 Vue.js使用vue-router构建单页应用 Vue.js状态管理工具V...

  • vue-cli是什么

    vue-cli是vue官方出品的快速构建单页应用的脚手架,里面集成了webpack,npm,nodejs,babe...

网友评论

      本文标题:vue 构建单页应用3

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