VUE

298 阅读2分钟

v-if 和 v-show 区别

1.v-if只有在判断为true的时候才能对数据进行渲染,false的时候把包含的代码进行删除。除非再次进行数据渲染,v-if才会重新判断。可以说用法比较倾向于对数据进行一次操作。

2.v-show无论判断是什么都会先对数据进行渲染,只是false时对节点进行display:none;的操作。所以在不重新渲染数据的情况下,改变数据的值可以使数据展示或隐藏。

A、 v-show 只是简单的控制元素的 display 属性,而 v-if 才是条件渲染(v-if条件为真,元素将会被渲染,条件为假,元素会被销毁   v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;)。

B、v-if有较低的初始开销,较高的切换开销,v-show有较高的初始开销,较低的切换开销(v-if有更高的切换消耗;v-show有更高的初始渲染消耗;

v-if适合运营条件不大可能改变;v-show适合频繁切换。

so,一般的,v-if有更高的切换消耗,而v-show有更多的初始化渲染消耗。

so,如果需要频繁的切换而对安全性无要求,使用v-show。如果在运行时,条件不可能改变,则使用v-if较好。)

C、v-show不能和v-else连用,不能用在template中

相同点

v-if与v-show都可以动态控制dom元素显示隐藏

不同点

v-if显示隐藏是将dom元素整个添加或删除,而v-show隐藏则是为该元素添加css--display:none,dom元素还在。

v-for中的key

  当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。这个类似 Vue 1.x 的 track-by="$index" 。

  这个默认的模式是有效的,但是只适用于不依赖子组件状态或临时 DOM 状态(例如:表单输入值)的列表渲染输出。

  为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。理想的 key 值是每项都有唯一 id。这个特殊的属性相当于 Vue 1.x 的 track-by ,但它的工作方式类似于一个属性,所以你需要用 v-bind 来绑定动态值

v-for指令四种用法:

a.v-for循环普通数组

b.v-for循环对象数组

c.v-for循环对象

d.v-for迭代数组

 <div id="app">
        <!-- <ul>
            <li v-for="item in 10">{{item}}</li>
        </ul> -->
        <ul>
            <li v-for="item in list">{{item}}</li>
        </ul>
        <ol>
            <li v-for="(item,index) in list" :key="index">{{index}}--{{item}}</li>
        </ol>
        <ul>
            <li v-for="item in json" :key="item.id">{{item.id}}--{{item.text}}</li>
        </ul>
    </div>
    <script>
        let vm = new Vue({
            el: "#app",
            data: {
               list:[
                   "足球",
                   "篮球",
                   "乒乓球"
               ],
               json:[
                   {
                       id:0,
                       text:"足球"
                   },{ 
                       id:1,
                       text:"篮球"
                   },{
                    id:2,
                       text:"乒乓球"
                   }
               ]
            }
        })
    </script>