vue 学习笔记 2016-8-17

终于踏上vue.js的学习之旅,想想就好激动,今天正式开始使用,总结一下今天遇到的种种问题。

1. vuex 状态管理架构

1.1 核心概念

store:容器,包含了state 和 mutations 两个属性。

state:状态,通过 store.state 来读取 state 对象

mutations:变更,通过 dispatch 某 mutation 的名字来触发状态变更

actions:动作,把 action 暴露到组件的方法中,用于分发 mutations 的函数

getter:通过在 vuex.getters 选项里定义的 getter 方法来读取状态

1.2 数据流

1)用户在组件中的操作触发 action 调用;

比如,用户点击,输入,或他什么操作,绑定action即可。

2)Actions 通过分发 mutations 来修改 store 实例的状态;

action会dispatch mutations 来改变store的state的内容。

3)Store 实例的状态变化反过来又通过 getters 被组件获知。

在通过getters将改变的内容反映到相应的组件上去。

2.vue 列表渲染

vue可以使用v-for指令基于一个数组渲染一个列表,然而,我想要渲染一个双层的数组列表

<div :gutter="0" v-for="days in dayArr">
    <p class="order-time">{{days.day}}</p>
    <p :gutter="0" v-for="order in days.order" track-by="$index">
      <span>{{order.name}}</span>
      <span>{{order.title}}</span>
      <span>{{order.price}}</span>
      <span>{{order.address}}</span>
    </p>
</div>

在第二层里 in 要根据第一层的结果来写。

3.inline-block

以前也经常遇到两个div变成inline-block的情况,父容器设置line-height,div设置vertical-align就搞定了。然而,vue里出现了和原生一样的问题,inline-block之间有个间距,只好依然给父容器设置font-size: 0 来解决。

除此之外,还有许多别的方法,参考去除inline-block元素间间距的N种方法--张鑫旭

4.array.map

参考例子:将数组中的单词转换成对应的复数形式.写下了下面这样的代码

var dailyOrder=[{day:1,times:2,hours:4},{day:2,times:4,hours:6}]
var newArr = []
var groupDataByDay = dailyOrder => {
  if (newArr.length > 0) {
    if (newArr[(newArr.length - 1)].day === dailyOrder.day) {
      newArr[(newArr.length - 1)].order.push(dailyOrder)
    } else {
      newArr.push({
        day: dailyOrder.day,
        order: [dailyOrder]
      })
    }
  } else {
    newArr.push({
      day: dailyOrder.day,
      order: [dailyOrder]
    })
  }
  return newArr
}
console.log(dailyOrder.map(groupDataByDay));

然而得到的并不是我想要的

[Array[2], Array[2]]

[[{
    day: 1,
    order: [{
        day: 1,
        hours: 4,
        times: 2
    }]
},
{
    day: 2,
    order: [{
        day: 2,
        hours: 6,
        times: 4
    }]
}], [{
    day: 1,
    order: [{
        day: 1,
        hours: 4,
        times: 2
    }]
},
{
    day: 2,
    order: [{
        day: 2,
        hours: 6,
        times: 4
    }]
}]]

一番改造后

var dailyOrder=[{day:1,times:2,hours:4},{day:2,times:4,hours:6}]
var newArr = []
var groupDataByDay = dailyOrder => {
  if (newArr.length > 0) {
    if (newArr[(newArr.length - 1)].day === dailyOrder.day) {
      newArr[(newArr.length - 1)].order.push(dailyOrder)
    } else {
      newArr.push({
        day: dailyOrder.day,
        order: [dailyOrder]
      })
    }
  } else {
    newArr.push({
      day: dailyOrder.day,
      order: [dailyOrder]
    })
  }
}
dailyOrder.map(groupDataByDay);
console.log(newArr);

总算得到了我想要的

[Object, Object]

[{
    day: 1,
    order: [{
        day: 1,
        hours: 4,
        times: 2
    }]
},
{
    day: 2,
    order: [{
        day: 2,
        hours: 6,
        times: 4
    }]
}]

恩,就这样子结束了~

时间: 2024-10-05 12:46:40

vue 学习笔记 2016-8-17的相关文章

Dreamweaver学习笔记---2016.08.17

静态网页:不访问数据库,直接写入HTML. 动态网页:在网上发布好的,我们可以通过网页预览到的,具有访问数据库的过程. HTML:Hyper Text Markup Language,超文本语音标记. <html>   -----开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> <body> 页面显示内容 </body> </html>       -----结束

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

Vue学习笔记入门篇——组件的通讯

本文为转载,原文:Vue学习笔记入门篇--组件的通讯 组件意味着协同工作,通常父子组件会是这样的关系:组件 A 在它的模版中使用了组件 B.它们之间必然需要相互通信:父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件.然而,在一个良好定义的接口中尽可能将父子组件解耦是很重要的.这保证了每个组件可以在相对隔离的环境中书写和理解,也大幅提高了组件的可维护性和可重用性.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props 向下传递

Vue学习笔记目录

本文为转载,原文:Vue学习笔记目录 Vue介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使用Vue.js. 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM.它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据

Vue学习笔记进阶篇——Render函数

本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器. <h1> <a name="hello-world" href="#hello-world"> Hello world! </a> </h1>

php学习笔记2016.1

基本类型    PHP是一种弱类型语言.      PHP类型检查函数   is_bool()    is_integer()  is_double()  is_string()   is_object()  is_array()  is_resource()   is_null()   继承   继承是从一个基类得到一个或多个派生系类的机制.  继承自另一个类的类被称为该类的子类.  子类可以增加父类(也称超类,superclass)之外新的功能,因此子类也被称为扩展.   构造方法和继承  

Vue学习笔记进阶篇——过渡状态

本文为转载,原文:Vue学习笔记进阶篇--过渡状态Vue 的过渡系统提供了非常多简单的方法设置进入.离开和列表的动效.那么对于数据元素本身的动效呢,比如: 数字和运算 颜色的显示 SVG 节点的位置 元素的大小和其他的属性 所有的原始数字都被事先存储起来,可以直接转换到数字.做到这一步,我们就可以结合 Vue 的响应式和组件系统,使用第三方库来实现切换元素的过渡状态. 状态动画和watcher 通过 watcher 我们能监听到任何数值属性的数值更新.可能听起来很抽象,所以让我们先来看看使用 T

Vue学习笔记进阶篇——列表过渡及其他

本文为转载,原文:Vue学习笔记进阶篇--列表过渡及其他本文将介绍Vue中的列表过渡,动态过渡, 以及可复用过渡是实现. 列表过渡 目前为止,关于过渡我们已经讲到: 单个节点 同一时间渲染多个节点中的一个 那么怎么同时渲染整个列表,比如使用 v-for ?在这种场景中,使用 <transition-group>组件.在我们深入例子之前,先了解关于这个组件的几个特点: 不同于 <transition>, 它会以一个真实元素呈现:默认为一个<span>.你也可以通过 tag

Vue学习笔记进阶篇——多元素及多组件过渡

本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯一的值来标记以让 Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容.即使在技术上没有必要,给在 <transition> 组件中的多个元素设置 key 是一个更好的实践. 示例: <transition> <button v-if="isEditing