2020-06-17之内嵌模板||数据异步更新||重用机制

内嵌模板

<body>

    <div id="app">

        <my-com></my-com>

        <!-- 通过inline-template属性可以临时修改组件的模板,替换原有模板 -->

        <my-com inline-template>

            <div>

                这是临时修改的模板

            </div>

        </my-com>

        <!-- 内嵌模板是临时的,不会对原始模板造成影响 -->

        <my-com></my-com>

        <my-com></my-com>

    </div>

</body>

<!-- 当一个组件模板在使用时,不满足渲染样式的需求 -->

<!-- 再写一个新的模板有点费时费力 -->

<!-- 此时可以临时修改组件模板,达到渲染需求 -->


<script type="text/html" id="my-tem">

    <div>

       <p>这是原来的子组件</p>

    </div>

</script>

<script>

    Vue.component('my-com', {

        template: '#my-tem',

        props: [],

        computed: {

        },

        data() {

            return {

            }

        }

    })

    var app = new Vue({

        el: "#app",

        data: {

        }

    })

</script>



数据异步更新

<body>

    <div id="app">

        {{people.name}}

    </div>

</body>

<script>

    var app = new Vue({

        el: "#app",

        data: {

            people: {

                name: "张三"

            }

        }

    })

    console.log(app.$el.innerText);


    //数据改变页面刷新一般是16.7毫秒

    // app.people.name = "李四";

    // console.log(app.$el.innerText);

    // //数据改变页面刷新一般是16.7毫秒

    // app.people.name = "王五";

    // console.log(app.$el.innerText);

    // // 最终就是王五  打印张三 张三 张三



    //数据改变页面刷新一般是16.7毫秒

    app.people.name = "李四";

    //下一帧刷新之后再执行操作

    Vue.nextTick(function () {

        console.log(app.$el.innerText);

    })

    //数据改变页面刷新一般是16.7毫秒

    app.people.name = "王五";

    //下一帧刷新之后再执行操作

    Vue.nextTick(function () {

        console.log(app.$el.innerText);

    })

    // 最终就是王五  打印张三 王五 王五

</script>



重用机制

<body>

    <div id="app">

        <template v-if="bool">

            <label for="">

                账号:

            </label><input type="text"></input>

            <label for="">

                密码:

            </label><input type="password"></input>

        </template>

        <template v-else>

            <label for="">

                手机号:

            </label><input type="text"></input>

            <label for="">

                验证码:

            </label><input type="text"></input>

        </template>

        <!-- v-if判断会造成标签的销毁和重建,如果input变迁被销毁重建,那么输入的信息 -->

        <!-- 会丢失,但是实际情况是,数据被保留下来了,原因是由于vue中存在标签重用机制 -->

        <!-- 惰性机制  一看切换之后 的标签一样 就不会销毁了 -->

        <button @click="bool = !bool">切换登录方式</button>


        <br><br><br>


        <!-- 避免重用机制 -->

        <template v-if="bool">

            <label for="">

                账号:

            </label><input type="text" key="name"></input>

            <label for="">

                密码:

            </label><input type="password" key="pass"></input>

        </template>

        <template v-else>

            <label for="">

                手机号:

            </label><input type="text" key="name"></input>

            <label for="">

                验证码:

            </label><input type="text" key="pass1"></input>

        </template>

        <!-- 切换之后 key值一样 依然惰性  依然重用 -->

        <!-- key值不一样时 销毁数据 清空 -->

        <button @click="bool = !bool">切换登录方式</button>

    </div>

    <!-- v-for循环时,为了避免循环创建的标签启用重用机制造成数据干涉 -->

    <!-- 需要在循环时添加key属性并绑定不同的值,一般为索引值 -->

</body>

<script>

    var app = new Vue({

        el: '#app',

        data: {

            bool: true

        }

    })

</script>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 插槽 <my-com> <!--默认组件标签中的内容不会渲染显示--> <!--没有使用插槽,并不会显示-->...
    HF_Life阅读 361评论 0 0
  • 01-前端开发和前端开发工具 一、前端开发 PRD(产品原型-产品经理) - PSD(视觉设计-UI工程师) - ...
    刊ing阅读 272评论 0 0
  • Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户...
    桂_3d6b阅读 855评论 0 0
  • VUE Vue :数据驱动的M V Vm框架 m :model(后台提供数据),v :view(页面),vM(模板...
    wudongyu阅读 5,429评论 0 11
  • Vue.js 基础 一套用于构建用户界面的渐进式框架, 核心库只关注视图层,易于上手,便于与第三方库或现有项目整合...
    前端小咖阅读 2,300评论 1 33