zoukankan      html  css  js  c++  java
  • vue 的"响应式"是什么意思/ Object.freeze( ) 阻止数据响应

    <p id="inpChange"> vue实例创建后,弹出窗口: newV.message==data.message
    </p>
     
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
     
    //创建数据对象
    var data={
    message:"good good study"}
     
    //创建一个新实例newV ,并把上面的数据对象data添加到这个newV实例中
    //添加created这个声明周期钩子函数(created 钩子可以在实例被创建后执行代码)
     
    var newV=new Vue({
    el:"#inpChange",
    data:data,
    created:function(){
              alert(this.message)
              alert(this.message==data.message),
              alert(this.message="day day up"),  //修改实例中this.message 的值
              alert(this.message==data.message)  //此时结果为true,说明data 这个数据对象的message 值也随之修改了(双向响应)
    },
    });

    例子说明:

    //创建数据对象
    var data={
    message:"good good study"}
    
     
    
    //创建一个新实例newV ,并把上面的数据对象data添加到这个newV实例中
    //添加created生命周期钩子函数 (created 钩子可以在实例被创建后执行代码)
    
    var newV=new Vue({
    el:"#inpChange",
    data:data,
    created:function(){
               alert(this.message==data.message)} ,   //返回结果ture, 说明message这个属性值已被添加到newV 这个实例中
               alert(this.message="day day up"),  //修改实例中this.message 的值
               alert(this.message==data.message)  //此时结果为true,说明data 这个数据对象的message 值也随之修改了(双向响应)
    },
    });
    
    
    //注意:
    只有当实例被创建时中存在的属性才是响应式的。
    也就是说如果你添加一个新的属性,比如:
    newV.b ="newMes"
    
    对b属性值的修改不会触发其他改变(不响应)
    
    可以预先设置一个带有初始值的数据对象,以后只要修改属性值就可以实现响应
    如果你知道你会在晚些时候需要一个属性,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:
    
    data: {
    newTodoText: '',
    visitCount: 0,
    hideCompletedTodos: false,
    todos: [],
    error: null
    }
    Object.freeze( )
    会阻止修改现有的属性,也意味着响应系统无法再追踪变化。(阻止响应)
    <div id="app">
    <p>{{ foo }}</p>
    <!-- 这里的 `foo` 不会更新! -->
    <button v-on:click="foo = 'after'">点击更改文字内容</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
    
    var obj = {
    foo: 'before'
    }
    
    Object.freeze(obj)
    
    new Vue({
    el: '#app',
    data: obj
    })

    例子说明:
    vue 部分

    1. 创建数据对象obj, 赋值 foo:"before",

    var obj = {
              foo: 'before'
    }
    
    Object.freeze(obj)   // 对object 对象使用 Object.freeze( ) 方法
    
    new Vue({
                el: '#app',
                data: obj
    })

    Html 部分

    2. 绑定click点击事件foo="after" 在 button 元素上,为了点击按钮后,改变 foo 的值

    <div id="app">  
      <p>{{ foo }}</p>
      <button v-on:click="foo = 'after'">点击更改文字内容</button>
    </div>

    3. 点击按钮后,obj.foo 的值没有改变,说明后续的点击事件没有改变foo 的值,响应被阻止了


    原文链接:https://blog.csdn.net/weixin_41796631/article/details/82823001

  • 相关阅读:
    如何远程关闭一个ASP.NET Core应用?
    Asp.Net Core 2.x 和 3.x WebAPI 使用 Swagger 时 API Controller 控制器 Action 方法 隐藏 hidden 与 and 分组 group
    Swashbuckle.AspNetCore3.0的二次封装与使用
    微服务日志之.NET Core使用NLog通过Kafka实现日志收集
    细说ASP.NET Core静态文件的缓存方式
    ASP.NET Core中的ActionFilter与DI
    查看.NET Core源代码通过Autofac实现依赖注入到Controller属性
    使用 python set 去重 速度到底是多快呢???
    搜狐视频 登录 md5 加密破解
    python 实现 DES CBC模式加解密
  • 原文地址:https://www.cnblogs.com/itgezhu/p/12174940.html
Copyright © 2011-2022 走看看