VUE02

2019-01-27  本文已影响1人  秋葵2022

Vue案例:

<body>
<div id="app">
    <!--第一部分-->
    <fieldset>
        <legend>info submit</legend>
        <div>
            <span>姓名:</span>
            <input type="text" placeholder="请输入姓名" v-model="newPerson.name">
        </div>
        <div>
            <span>年龄:</span>
            <input type="text" placeholder="请输入年龄"  v-model="newPerson.age">
        </div>
        <div>
            <span>性别:</span>
            <select  v-model="newPerson.sex">
                <option value="男">男</option>
                <option value="女">女</option>
            </select>
        </div>
        <div>
            <span>手机:</span>
            <input type="text" placeholder="请输入手机号码"  v-model="newPerson.phone">
        </div>
        <button @click="createNewPerson()">创建新用户</button>
    </fieldset>
    <!--第二部分-->
    <table>
        <thead>
        <tr>
            <td>姓名</td>
            <td>性别</td>
            <td>年龄</td>
            <td>手机</td>
            <td>删除</td>
        </tr>
        </thead>
        <tbody>
        <tr v-for="(p, index) in persons">
            <td v-text="p.name"></td>
            <td v-text="p.age"></td>
            <td v-text="p.sex"></td>
            <td v-text="p.phone"></td>
            <td>
                <button @click="delPerson(index)">删除</button>
            </td>
        </tr>
        </tbody>
    </table>
</div>

<script src="js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        mounted(){
            // 请求数据
            this.getPersonList();
        },
        data: {
            persons: [],
            newPerson: {name: '', age: 0, sex: '男', phone: ''}
        },
        methods:{
            getPersonList(){
                this.persons = JSON.parse(window.localStorage.getItem('persons') || '');
            },
            createNewPerson(){
                if(this.newPerson.name === ''){
                    alert('name cant be null');
                    return;
                }
                if(this.newPerson.age < 0){
                    alert('please enten your right age');
                    return;
                }
                this.persons.unshift(this.newPerson);
                window.localStorage.setItem('persons',JSON.stringify(this.persons));
                // 清空数据
                this.newPerson = {name: '', age: 0, sex: '男', phone: ''}
            },
            delPerson(index){
                this.persons.splice(index,1);
                window.localStorage.setItem('persons',JSON.stringify(this.persons));
            }
        }
    })
</script>
</body>

localStorage:

  • localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
  • 存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。

常用API:

一、MVC和MVVM的区别?

1. MVC

M是指业务模型,V是指用户界面,C则是控制器

  • Model和View是完全隔离的,由C作为中间人来负责二者的交互
  • 同时三者是完全独立分开的
  • 这样可以保证M和V的可测试性和复用性,但是一般由于C都是为特别的应用场景下的M和V做中介者,所以很难复用。



MVC的好处:耦合性低、重用性高、部署快,生命周期成本低、可维护性高
存在的问题:不适合小型,中等规模的应用程序、视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问/

2.MVVM

Model --->每个页面的单独数据
View --->每个页面中的HTML结构
VM ---> 调度者[图片上传中...(image.png-ef8151-1548517314428-0)]

![MVVM](https://img.haomeiwen.com/i5017428/3788364b336c811c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

好处:

二、常见的修饰符

<body>
<div id="app">
    <div class="big-box" @click="bigBoxClick()">
        <div class="box" @click="boxClick()">
            <button @click="btnClick()">按钮</button>
        </div>
    </div>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{},
        methods:{
            bigBoxClick(){
                console.log('点击了大盒子');
            },
            boxClick(){
                console.log('点击了盒子');
            },
            btnClick(){
                console.log('点击了按钮');
            },
            attack(){
                console.log('fire in the hall');
            }

        }
    })
</script>
</body>

这个时候点击 按钮,如下图,时间冒泡了


image.png

1.阻止冒泡:

<div id="app">
    <div class="big-box" @click="bigBoxClick()">
        <div class="box" @click="boxClick()">
            <button @click.stop="btnClick()">按钮</button>
        </div>
    </div>
</div>
image.png

2.事件的捕获

<div id="app">
    <div class="big-box" @click="bigBoxClick()">
        <div class="box" @click.capture="boxClick()">
            <button @click="btnClick()">按钮</button>
        </div>
    </div>
</div>

点击按钮后,先触发 红盒子的事件,然后触发 按钮 事件,最后触发大盒子。


事件捕获

3.self

<div id="app">
    <div class="big-box" @click="bigBoxClick()">
        <div class="box" @click.self="boxClick()">
            <button @click="btnClick()">按钮</button>
        </div>
    </div>
</div>

点击 按钮,触发按钮事件 和 大盒子的事件,红盒子被跳过了


点击按钮

红盒子上的事件在点击了红盒子才会触发


点击红盒子

4.阻止默认事件

<div id="app">
<a href="http://www.baidu.com" @click.prevent="attack()">点击我啊</a>
</div>
阻止默认事件

5.once 事件只触发一次

<div id="app">
    <button @click.once="attack()">click me</button>
</div>

点击按钮,只会 触发一次,第二次点击不会再触发


6. .stop 和 .self 的区别

三、样式类

1. :class

<body>
<div id="app">
    <p :class="['box1']">people change,things go wrong</p>
    <p :class="['box1',isShow ? 'box2 box3':'']">shit happens,life gose on</p>
    <p :class="[{'box1':isShow}]">不说再见</p>
    <p :class="classObj">调整呼吸,下一句让人更加惊艳</p>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            isShow:true,
            classObj:{'box1':false,'box2':false,'box3':true}
        }
    })
</script>
</body>
样式类

2. :style

<body>
<div id="app">
    <p :style="style1">people change,things go wrong</p>
    <p :style="[style1,style2]">shit happens,life gose on</p>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            style1:{color:'red',fontWeight:'bold'},
            style2:{backgroundColor:'blue'}
        }
    });
</script>
</body>
:style

四、ES6知识点

ES6中 伪数组转真数组:

forEach
伪数组转成真数组才能遍历

Array.prototype.slice.call(伪数组).forEach(()=>{});
<body>
<div id="app">
    <ul ref="ulParent">
        <li style="height: 60px;">1</li>
        <li style="height: 70px;">2</li>
        <li style="height: 80px;">3</li>
        <li style="height: 90px;">4</li>
        <li style="height: 100px;">5</li>
    </ul>

    <button @click="getAllLiHeight()">获取高度</button>
    <button @click="dealSome()">验证some</button>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
            dataArr:['apple','book','blackboard']
        },
        methods:{
            getAllLiHeight(){
                let liHeightArr = [];
                // 1. 获取 DOM 对象
                let allLis = this.$refs.ulParent.getElementsByTagName('li');
                // 2.把 伪数组转换为真数组
                Array.prototype.slice.call(allLis).forEach((li)=>{
                    liHeightArr.push(li.clientHeight);
                });
                console.log(Array.prototype.slice.call(allLis));
                console.log(liHeightArr);
            },
            dealSome(){
                let result = this.dataArr.some(function (str) {
                    return str === 'apple';
                });
                console.log(result);
            }
        }
    })
</script>
</body>

结果:

some 和 伪数组转真数组



some 和 every: 判断数组的所有元素是否满足指定条件,区别在于,
every是一假即假,而some是一真即真。
<script>
    var persons = [
        {name:'Nurato',age:10},
        {name:'LiMing',age:20},
        {name:'Daney',age:30}
    ];
    var every_result = persons.every(function (p) {
        return p.age > 15
    });
    console.log(every_result); //false

    var some_result = persons.some(function (p) {
        return p.age > 21;
    });
    console.log(some_result); // true
</script>
上一篇 下一篇

猜你喜欢

热点阅读