Vue.JS入门篇--列表渲染

Vue.JS入门篇--列表渲染,第1张

查看一下效果,应该很容易得到结果

有时我们可能需要重复一个包含多个节点的块,这时可以用 <template> 标签包裹这个块。这里的 <template> 标签只起到语义上的包裹作用,其本身不会被渲染出来。例如:

简单值 (primitive value) 即字符串、数字、boolean 等并非对象的值。对于包含简单值的数组,你可用 $value 直接访问值:

有时我们可能想要更明确地访问当前作用域的变量而不是隐式地回退到父作用域。你可以通过提供一个参数给 v-repeat 指令并用它作为将被迭代项的别名:

Vuejs 内部对被观察数组的变异方法 (mutating methods,包括 push(), pop(), shift(), unshift(), splice(), sort() 和 reverse()) 进行了拦截,因此调用这些方法也将自动触发视图更新。

下面是一个演示的例子,点击按钮的时候数据项会被移除

Vuejs 给被观察数组添加了两个便捷方法:$set() 和 $remove() 。

你应该避免直接通过索引来设置数据绑定数组中的元素,比如 demoitems[0] = {},因为这些改动是无法被 Vuejs 侦测到的。你应该使用扩展的 $set() 方法:

$remove() 只是 splice()方法的语法糖。它将移除给定索引处的元素。当参数不是数值时,$remove() 将在数组中搜索该值并删除第一个发现的对应元素。

当你使用非变异方法,比如filter(), concat() 或 slice(),返回的数组将是一个不同的实例。在此情况下,你可以用新数组替换旧的数组:

你可能会认为这将导致整个列表的 DOM 被销毁并重新渲染。但别担心,Vuejs 能够识别一个数组元素是否已有关联的 Vue 实例, 并尽可能地进行有效复用。

在某些情况下,你可能需要以全新的对象(比如 API 调用所返回的对象)去替换数组。如果你的每一个数据对象都有一个唯一的 id 属性,那么你可以使用 track-by 特性参数给 Vuejs 一个提示,这样它就可以复用已有的具有相同 id 的 Vue 实例和 DOM 节点。

例如:你的数据是这个样子的

那么你可以像这样给出提示:

在替换 items 数组时,Vuejs 如果碰到一个有 _uid: '88f869d' 的新对象,它就会知道可以直接复用有同样 _uid 的已有实例。 在使用全新数据重新渲染大型 v-repeat 列表时,合理使用 track-by 能极大地提升性能。

你也可以使用 v-repeat 遍历一个对象的所有属性。每个重复的实例会有一个特殊的属性 $key。对于简单值,你也可以象访问数组中的简单值那样使用 $value 属性。

在 ECMAScript 5 中,对于给对象添加一个新属性,或是从对象中删除一个属性时,没有机制可以检测到这两种情况。针对这个问题,Vuejs 中的被观察对象会被添加三个扩展方法: $add(key, value), $set(key, value) 和 $delete(key)。这些方法可以被用于在添加 / 删除观察对象的属性时触发对应的视图更新。方法 $add 和 $set 的不同之处在于当指定的键已经在对象中存在时 $add 将提前返回,所以调用 obj$add(key) 并不会以 undefined 覆盖已有的值。

v-repeat 也可以接受一个整数。在这种情况下,它将重复显示一个模板多次。 下面的例子将迭代3次。

有时候我们只需要显示一个数组的过滤或排序过的版本,而不需要实际改变或重置原始数据。Vue 提供了两个内置的过滤器来简化此类需求: filterBy 和 orderBy。

vue实例创建其实很简单,首先讲一下vue其实是由一个构造函数new Vue()生成的一个实例

你可以把这作为根实例,所有嵌套在其下面的组件都是实例

接下来就是写入数据,实例里面接受的是一个对象

直接将其赋给data属性

到这里一个vue实例就创建好了,因为vue是响应式的,设计模式是observer pattern(观察者模式),当数据改变时,vue视图会自动更新,(除非你使用objectfreeze()阻止修改属性)。

紧接着挂载实例,挂载实例顾名思义就是讲vue挂载到dom树中,从而经过浏览器引擎解析成页面。

最后怎么渲染数据呢?其实也很简单,vue本身就实现了数据绑定,双大括号的文本插值,这里要与react的单大括号功能是一样的,都是为了实现数据的显示绑定。

到这里实例篇就结束了,有错误的欢迎批评指正。

最近在学习Vuejs,把自己遇到的问题做个记录,所以,今天添加一点小笔记。

在项目中遇到两个问题,简单的做个笔记来记录自己解决的问题,可能不是很好的处理办法,欢迎提出,自己还在不断优化中

第一个是vue在加载页面的时候,会先加载静态资源,这个时候数据还没有请求回来,用户会先看到静态的内容(就是页面固定写死的),过一会才会有数据回来渲染,这体验是很差的,其实解决办法也很简单,就是用vue里的

v-if

来判断请求的数据是否返回 

<div

class="container"

id="app"

v-cloak>

<div

v-if='moneyInMsguuid'>

<in-account-msg

:money-in-msg="moneyInMsg"></in-account-msg>

</div>

</div>

这里的

v-if

=

'moneyInMsguuid'

就是来判断数据有没有请求回来,如果请求回来就让他显示,没有请求到数据,就让他loading,这样体验就会好很多。在这里还需要注意的是,v-if判断的数据源,是数据返回的字段,如果两个字段只能存在其一的话,可以v-if

='a

||

b'

来判断数据是否成功的返回;还要注意的一点是,不能直接在组件里用v-if判断,也不能直接在根标签里判断,直接嵌套一个div就可以解决,并不影响样式,只做数据是否正常返回的显示作用;

第二个就是在使用vuex时,有数据缓存;我遇到的情况是,在列表页点击进入详情页,返回到列表页,在进入另一个详情页的时候,数据会显示之前的数据,同时页面还在loading(接口返回的数据比较慢),过一会数据返回的时候,才重新渲染页面。可能是自己对vuex理解的不够深入,没有在vuex基础上解决这个问题。虽然曲折的解决了这个问题,但是不够zhuang,但是解决了问题,后期再做优化。

在之前解决的方案中,是进入页面的时候,重新刷新页面,重新请求数据,代码如下:

export

const

refresh

=

(title)

=>

{

documenttitle

=

title;

let

iframe

=

documentcreateElement('iframe');

 iframesrc

=

require('/mmjpg');

iframesetAttribute('style',

'display:none;');

let

loadFn

=

function

()

{

iframeremoveEventListener('load',

loadFn);

documentbodyremoveChild(iframe);

consoleinfo('Page

Title

IS

'

+

title);

iframe

=

null;

loadFn

=

null;

}

documentbodyappendChild(iframe)

iframeaddEventListener('load',

loadFn);

}

但是没有达到预期的效果,依然会出现上面的情况

丫的,抓狂了(被别人催的感觉真的不爽)

百度啊,google啊,都没有遇到这种情况的?找到一个,还是提问的,没有回答的,好吧,还是靠自己。自己动手,丰衣足食啊

思路是,定义一个参数status为false,当数据没有请求回来,就不显示,也是用上面的方式来判断,一直loading(请求失败,去掉loading),当数据返回的时候,让status为true;使用$nextTick来更新数据

贴上自己部分的代码作为参考:

<template>

<div

v-if='status

&&

ordername'>

//页面展示的数据

</div>

</template>

<script>

export

default{

data(){

return

{

status:false

}

},

created(){

var

_this

=

this;

thissetDd({res

=>{

_this$nextTick(function(){

_thisstatus=

true

});

}})

},

computed:{

mapGetters({//getter获取的数据})

},

methods:{

mapActions(['setDd'])

//获取数据的方法

}

}

</script>

处理的方式比较丑陋,但是实现了想要的效果;这里注意一点就是v-if的判断问题。(v-if='status

&&

ordername')这个用了并且,目的是有数据返回,才能让他显示,如果没有数据,会显示静态的值,数据都为underfind

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

const context = { url: requrl }

const renderStream = rendererrenderToStream(context)

明白你的意思了,就是将2表中G列里的数据填充到1表中,是吧? 用查找与引用函数就可以实现了。 =VLOOKUP(A2,Sheet2!A:G,7,FALSE)这是我在表中用到的公式,现在一步一步的简单告诉你。 插入Fx函数-常用函数-vlookup-第一栏(任栏)选中你要查

以上就是关于Vue.JS入门篇--列表渲染全部的内容,包括:Vue.JS入门篇--列表渲染、vue实例创建及数据挂载渲染、解决vue2.x中数据渲染以及vuex缓存的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9683240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存