11-22初始VUE

VUE响应式原理

添加属性的方式 :

let obj = { }
方式一 :obj.name = ' 张三'
方式二:obj[ ' age ' ] = 20
方式三:Object.defineProperty(obj , ' sex',{ value:‘男’ }) 补充: 第一个参数是对象名,第二个参数属性名,第三个参数是所需要添加的值 ,常用上面两种 ,但是第三种方式也是有独特的优点。使用第三种方式给对象添加的属性,默认不可被枚举,也不能被 删除 ,对属性的保护措施更加严格 。需要添加代码方可操作删除以及枚举,可以添加enumerable :true 允许被枚举, configurable : ture 允许被删除,都是默认不允许

vue响应式源码

let hello = {
            name: '张三',
            age: 20
        }
       // 把定义的对象渲染到页面
        document.querySelector("#ddd").innerHTML = hello.name
        document.querySelector("#age").innerHTML = hello.age
       // 创建个空对象
        let _data = {}
       // 给空对象添加name属性
        Object.defineProperty(_data, 'name', {
            get() {
       // 点击才可以获取数据。
                return hello.name
            },
            set(val) {
      // 对获取的数据进行修改,然后再渲染到桌面。
                hello.name = val
                document.querySelector("#ddd").innerHTML = hello.name
            }
        })
      // 给空对象添加age属性
        Object.defineProperty(_data, 'age', {
            get() {
      // 点击才可以获取数据。
                return hello.age
            },
            set(val) {
     // 对获取的数据进行修改,然后再渲染到桌面。
                hello.age = val
                document.querySelector("#age").innerHTML = hello.age
            }
        })

常用的指令操作

绑定

v-bind: 用于绑定属性,可以再属性值里边表达式,也可以省略v-bind直接使用冒号: ,但是这个是单项绑定

v-on 绑定方法,省略v-on,用@也可以。
v- model 双向绑定,是v-bind和v-on 的结合

 <div id="app">
        <div>
            <span>姓名:</span>
            <!-- v-bind:用于绑定属性,通过v-bind:绑定过的属性,可以在属性值可以写表达式 -->
            <!-- v-on:用于绑定事件,通过v-on:绑定过的事件,可以指定Vue实例定义的方法 -->
            <input type="text" v-bind:value="name" v-on:input="updateName">{{name}}
        </div>
        <div>
            <span>年龄:</span>
            <!-- v-bind:可以用:简写。 -->
            <!-- v-on:可以用@简写。 -->
            <!-- 如果事件方法的代码不是很多,可以写在行内,注意:这里不能写this,$event是事件对象 -->
            <input type="text" :value="age" @input="age = $event.target.value">{{age}}
        </div>
        <div>
            <span>工作:</span>
            <!-- 通过v-model指令,可以实现对数据的双向绑定,
            v-model指令是 v-bind:value 和 v-on:input 的简写。-->
            <input type="text" v-model="job">{{job}}
        </div>
    </div>
    <script src="../js/vue.js"></script>
    <script>

        // 关闭生产提示
        Vue.config.productionTip = false
        let vm = new Vue({
            el: '#app',
            //数据
            data: {
                name: '张三',
                age: 20,
                job:'程序员'
            },
            methods: {
                updateName(e){
                    //获取文本框里面的内容,更新数据
                    this.name = e.target.value
                }
            },
        })
    </script>

条件渲染和列表渲染

 <div id="app">
        <!-- 根据成绩,显示下面的等级 -->
        <h2 v-if="score>=90">优秀</h2>
        <h2 v-else-if="score>=80">良好</h2>
        <h2 v-else-if="score>=70">中等</h2>
        <h2 v-else-if="score>=60">合格</h2>
        <h2 v-else>差</h2>
        <hr>
        <button @click="isShow=!isShow">显示/隐藏</button>
        <!-- 每次要根据isShow的值,确定是否渲染页面 -->
        <div v-if="isShow">
            <img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F201804%2F28%2F20180428174908_sgsyj.thumb.1000_0.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1640144539&t=de45197a8aa3bf884b08b791723e7ed0">
        </div>
        <hr>
        <!-- 模板已经渲染成功,通过样式控制显示隐藏 -->
        <div v-show="isShow">
            <img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic40.nipic.com%2F20140428%2F9081536_114914525167_2.jpg&refer=http%3A%2F%2Fpic40.nipic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1640144712&t=1261090ac684bf8e3c83f61ed012a2a7">
        </div>
        <hr>
        <ul>
            <!-- v-for指令,用于列表渲染;类型渲染时,通常都要绑定key,key的作用是提高渲染性能。
            注意:key必须是唯一,暂时可以将列表的索引作为key值去使用。 -->
            <li v-for="(item,index) in foods" :key="index">{{index}}--{{item.name}}--{{item.price}}</li>
        </ul>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        Vue.config.productionTip = false
        new Vue({
            el:'#app',
            //定义数据
            data:{
                score:55,
                isShow:false,
                foods:[
                    {
                        id:1,
                        name:'薯片',
                        price:7.9
                    },
                    {
                        id:2,
                        name:'饼干',
                        price:3.9
                    },
                    {
                        id:3,
                        name:'面包',
                        price:9.9
                    },
                    {
                        id:4,
                        name:'蛋糕',
                        price:16.9
                    }
                ]
            }
        })
    </script>

v-if 和 v-show 如何选择
如果页面需要反复切换显示和隐藏,用v-show。
如果页面中有很多模块需要隐藏,用户可能只对其中的某个模块感兴趣,用v-if,
所有的模块首屏加载时,全部都不渲染,当用户选择指定的模块后,再渲染指定的模块。

补充 :

// 关闭生产提示
        Vue.config.productionTip = false
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 本文档基于vue-cli技术栈总结了https://www.jianshu.com/p/55c61751461b ...
    胖哆啦阅读 191评论 0 0
  • 前沿 置身世外只为暗中观察!!!Hello大家好,我是魔王哪吒!重学巩固你的Vuejs知识体系,如果有哪些知识点遗...
    lessonSam阅读 1,164评论 0 13
  • VUE Vue :数据驱动的M V Vm框架 m :model(后台提供数据),v :view(页面),vM(模板...
    wudongyu阅读 5,374评论 0 11
  • Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户...
    桂_3d6b阅读 798评论 0 0
  • 一、概念介绍 Vue.js和React.js分别是目前国内和国外最火的前端框架,框架跟类库/插件不同,框架是一套完...
    刘远舟阅读 1,035评论 0 0