vue学习01

1v-cloak 插值表达式闪烁问题
v-text 默认是没有闪烁问题 会覆盖原本的内容 插值表达式不会
v-html

<div id="app">
            <p>{{msg}}</p>
            <p v-clock>===={{msg}}===</p>
            <p v-html="msg2">hello world</p>
            <p v-text="msg"></p>
            <p ></p>
        </div>
    </body>
    <script>
        
        var vm= new Vue({
            el:'#app',
            data:{
                msg:'1233',
                msg2:'<h1>天行健 君子以自强不息!<h1>'
            }
         })
    </script>

图片.png

2 v-bind,v-on指令学习

<button v-bind:title="msg">button</button>

v-bind绑定属性 :缩写
v-on绑定事件 @缩写

<button v-bind:title="msg+'兽人永不为奴'" v-on:click="say">button</button>

v-on:click点击事件
v-on:mouseover鼠标覆盖事件


图片.png

3跑马灯效果制作


<p>{{msg}}</p>
            <button @click="lang()">lang</button>
            <button @click="stop()">stop</button>

var vm= new Vue({
            el:'#app',
            data:{
                msg:'天青色等烟雨',
                msg2:'<h1>天行健 君子以自强不息!<h1>',
                interValID:null
            },methods:{
                say:function(){
                    alert('hello vue.js!')
                },
                show:function(msg){
                    alert(msg)
                    
                },
                lang(){
                    if(this.interValID!=null)return;
                    
                    this.interValID=setInterval( () => {
                        var start=this.msg.substring(0,1)
                        var end=this.msg.substring(1)
                        this.msg=end+start
                        console.log(this.msg)
                    },500)
                },
                stop(){
                    clearInterval(this.interValID)
                    this.interValID=null;
                }
            }
         })

开启定时器 停止定时器
截取到后面所有字符串substring(0,1)
清除之后吧intervalId置为null

vm实例 会监听自己身上data中所有数据的改变 只要数据一发生改变,就会自动把最新的数据,从data上同步到页面中去


图片.png

图片.png

setInterval( () =>
=> es6箭头函数

4事件修饰符的介绍

.stop阻止冒泡
.prevent阻止默认行为
.capture 捕获机制
.self实现只有点击当前元素的时候 才会触发的函数
.once

实例
没有使用.stop

图片.png

<style type="text/css">
            .inner{
                height: 150px;
                background-color: #009A61;
            }
        </style>

<div id="app">
            <div class="inner" @click="divhandler">
                <input type="button" value="戳他" @click.stop="btnhandler"></input>
            </div>
        </div>

<script>
    var vm =new Vue({
        el:'#app',
        data:{
            
        },
        methods:{
            divhandler(){
                console.log('触发inner div')
            },
            btnhandler(){
                console.log('触发 btn 按钮的事件')
            }
            }
    })
    
</script>
图片.png

stop阻止事件往外冒
prevent 阻止默认事件 如 网址跳转 submit表单

<a href="https://www.baidu.com"@click="linkclick">百度一下</a>

.self 只有点击当前元素才会触发事件处理函数

<div class="inner" @click.self="divhandler">
                <input type="button" value="戳他" @click="btnhandler"></input>
            </div>

此时只会触发btn按钮的事件 不会触发外部的事件,要想触发外部的div事件 可以点击 inner 即inner.css区域即可触发外部的innerhandler事件


图片.png
<a href="https://www.baidu.com"@click.preven.once="linkclick">百度一下</a>
、此时只能阻止一次默认行为

比较:
click.prevent.once
click.once.prevent
其实没有区别
只触发一次事件处理函数
<style type="text/css">
            .inner{
                height: 150px;
                background-color: #009A61;
            }
            .outer{
                padding: 40px;
                background-color: red;
            }
        </style>
<div id="app">
            
            
            <div class="outer"@click="divhandler2">
                <div class="inner" @click="divhandler">
<input type="button" value="戳他" @click.self="btnhandler"></input>
.self只会阻止自己身上冒泡行为的触发 并不会阻止真正冒泡的行为
.stop会阻止真正的冒泡行为
<input type="button" value="戳他" @click.stop="btnhandler"></input>
                </div> 
            </div>
        </div>

此时只会出现btn按钮的事件
inner
outer
都被stop阻止了


图片.png

讲解v-model实现表单元素的数据双向绑定
v-bind只能实现数据的单项绑定 从 M 自动绑定到V中 无法实现数据的双向绑定
v-mode 实现表单元素和Model中数据的双向数据绑定
v-model只能运用在表单元素中(input(radio,text,address,email) select checkbox textarea)

    <div id="app">
            <h4>{{msg}}</h4>
            <!-- <input  type="text"  v-bind:value='msg' style="width: 10%;"/> -->
            <input  type="text"  v-model="msg" style="width: 10%;"/>
        </div>

<script>
        var vm=new Vue({
            el:'#app',
            data:{
                msg:'HELLO'
            },
            methods:{
                
            }
        })
    </script>

v-model实现计算器

<div id="app">
            <!-- <h4>{{msg}}</h4>
            <!-- <input  type="text"  v-bind:value='msg' style="width: 10%;"/> -->
        <!--    <input  type="text"  v-model="msg" style="width: 10%;"/> --> 
        <input type="text"  v-model="n1"/>
        
        <select v-model="opt">
            <option value="+">+</option>
            <option value="-">-</option>
            <option value="*">*</option>
            <option value="/">/</option>
        </select>
        <input type="text" v-model="n2" />
        
        
        <input type="button" value="=" @click="calc"/>
        <br />
        <input type="text" v-model="resu" />
        </div>
    </body>
    <script>
        var vm=new Vue({
            el:'#app',
            data:{
                /* msg:'HELLO' */
                n1:0,
                n2:0,
                resu:0,
                opt:'+'
            },
            methods:{
                calc(){
                    
                    /* switch(this.opt){
                        case '+':
                        this.resu=parseInt(this.n1)+parseInt(this.n2)
                        break;
                        
                        case '-':
                        this.resu=parseInt(this.n1)-parseInt(this.n2)

                        break;
                        
                        case '*':
                        this.resu=parseInt(this.n1)*parseInt(this.n2)

                        break;
                        
                        case '/':
                        this.resu=parseInt(this.n1)/parseInt(this.n2)

                        break;
                        
                        
                    }
                     */
                     var str='parseInt(this.n1)'+this.opt+'parseInt(this.n2)'
                    this.resu=eval(str); 
                }
            }
        })
    </script>

n1,n2,resu默认都为0 均实现数据双向绑定
v-model =n1
v-model n2
v-model =resu
select 也实现数据双向绑定 v-model=opt

图片.png

六通过属性绑定为元素设置class样式

<style>
            .red{
                color: red;
            }
            .thin{
                font-weight: 200;
            }
            .italic{
                font-style: italic;
            }
            .active{
                letter-spacing: 0.7em;
            }
        </style>
<div id="app">
            <h1 :class="{red:true, thin:true,italic:true,active:true}">
                不要问我从哪里来heyjude
            </h1>
            
            <!-- 三元表达式 -->
            <h1 :class="['thin',italic,flag?'active':'']">不要问我从哪里来heyjude</h1>
            
            <!-- 传的是一个对象  避免三元表达式的麻烦   flag 是data中的flag属性,默认为true -->
            <h1 :class="['thin',italic,{'active':flag},'red']">不要问我从哪里来heyjude</h1>
            <h2>{{msg}}</h2>
        </div>

<script>
        new Vue({
            el:'#app',
            data:{
                flag:true,
                msg:"zoro"
                
            },
            methods:{
                
            }
        })
    </script>


图片.png

设置行内样式

<div id="app">
            <h1 :style="[s1]">兽人永不为奴!</h1>
            <h2 :style="{color:'red','font-weight':100}">hey jude</h2>  传入多个属性
</div>
<script>
        new Vue({
            el:'#app',
            data:{
                s1:{ 'color':'green','font-weight':200},
                s2:{'font-style':'italic'}
            },
            methods:{
                
            }
        })
        
    </script>

图片.png

v-for的使用方式

<div id="app">
            <table>
                <tr>
                    <th>name</th>
                    <th>age</th>
                    <th>sex</th>
                </tr>
                <tr v-for=" p in people">
                    <td>{{p.name}}</td>
                    <td>{{p.age}}</td>
                    <td>{{p.sex}}</td>
                </tr>
            </table>
            <p v-for="(item, i) in list">索引值{{i}}--每一项{{item}}</p>
            <p v-for="count in 4">这是第{{count}}次循环</p>
            <p v-for="(val,key) in user">值是:{{val}}--键是:{{key}}</p>
        </div>
<script>
        new Vue({
            el:'#app',
            data:{
                people:[{
                    name:'Lee',
                    age:12,
                    sex:'MALE'
                },{
                    name:'ZORO',
                    age:11,
                    sex:'MALE'
                },{
                    name:'XIN',
                    age:21,
                    sex:'FEMALE'
                }],
                list:[1,2,3,4,5,6,7,8],
                user:{
                    name:'周笔畅',
                    age:17,
                    sex:'Male'
                }
            },
            
            methods:{
                
            }
        })
        /* [].forEach((item,i)=>{}) */
    </script>

v-for循环普通数组 v-for循环对象数组 v-for迭代数字(count值从1 开始不是从0开始)


图片.png

v-for添加元素

<div id="app">
            
            <div>
                <label>Id</label>
                <input type="text" v-model="id"/>   
                
                <label>Name</label>
                <input type="text" v-model="name"/>
                
                <label>submit</label>
                <input type="button" @click="add" value="添加"/>
            </div>
            
            <p v-for=" x in xiaoming" :key="x.id">
                
                <input type="checkbox" />{{x.id}}--{{x.name}}
            </p>
        </div>

<script>
        new Vue({
            el:'#app',
            data:{
                id:'',
                name:'',
                xiaoming:[
                    {id:1,name:'李斯',},
                    {id:2,name:'荀子',},
                    {id:3,name:'韩非',},
                    {id:4,name:'嬴政',}
                ]
            },methods:{
                 add(){
                    this.xiaoming.unshift({id:this.id,name:this.name})
                } 
            }
        })
    </script>
图片.png

v-if 每次都会重新删除或创建元素
v-show每次不会重新进行DOM的删除和创建操作 只是切换了元素的display :none样式

设计频繁的切换 不适用v-if
v-if有较高的切换性能消耗
v-for有较高的初始渲染消耗

图片.png

https://www.bilibili.com/video/av36650577/?p=20
https://github.com/shy1118999/vue.js
图片.png

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

推荐阅读更多精彩内容

  • # 传智播客vue 学习## 1. 什么是 Vue.js* Vue 开发手机 APP 需要借助于 Weex* Vu...
    再见天才阅读 3,519评论 0 6
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 10,973评论 4 129
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,183评论 0 25
  • 一、了解Vue.js 1.1.1 Vue.js是什么? 简单小巧、渐进式、功能强大的技术栈 1.1.2 为什么学习...
    蔡华鹏阅读 3,307评论 0 3
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,043评论 0 29