Vue总结(二)

十年热恋 提交于 2020-01-02 04:29:16

原始引用:开发时使用开发版本,线上使用生产版本。
原始引用到html中,在浏览器中控制台输入Vue,输出一个函数就可以。
defineProperties实现的数据绑定。

//defineProperties
// app.message = "assassin" vue实现了对象直接修改对象下面的任何嵌套的对象或者属性

var app = new Vue({
    el: "#root",
    data: {
        message: "hello world"
    }
});

v-bind(:)

条件 v-if直接影响DOM节点是否存在

v-show,只是display:none,DOM存在

循环:v-for

<ul>
    <li v-for="item in items"></li>
</ul>

var app = new Vue({
    el: "#root",
    data: {
        items: [1,2,3,4]
    }
});

v-for的键

<ul>
    <li v-for="(item,index) in items" v-bind:key="'item'+index"></li>
    //index:索引,key设置的键
</ul>

绑定事件:v-on,对应的写在methods对象中。

<button v-on:click="func"></button>

methods: {
    func: function() {
        alert(0);
    }
}
<ul>
    <li v-for="(item,index) in items"><span v-on:click="funcDelete(index)">删除</span></li>
    //传递循环中的参数
</ul>

var app = new Vue({
    el: "#root",
    data: {
        items: [1,2,3,4]
    },
    methods: {
        funcDelete: function(index) {
            this.items.splice(index,1);//删除index的这一项
        }
    }
});

数据双向绑定v-model

<input type="text" v-modle="message"/>
var app = new Vue({
    el: "#root",
    data: {
        message: "assassin"
    }
});

组件

Vue.component(),定义全局组件

<div id="root"></div>

var app = new Vue({
    el: "#root",
    template: `
    <div>
        //...要用一个大的容器进行包装
    </div>
    `,
    data: {},
    mthods: {}
});//大组件

小组件:

Vue.component("list-item",{//item此时定义的名称
    template: `<div>{{item_props}}</div>`,
    props: ["item_props"]//申明从父级拿来的东西
});

//使用
<list-item v-for="item in items" v-bind:item_props="item"></list-item>
//绑定子组件的item

详细案例:

   <div id="root">
        <!-- <input type="text" v-model="message">
        <button @click="addClick">submit</button>
        <ul>
            <li v-for="item in items">{{item}}</li>
        </ul> -->
   </div> 

   <script>

   var App = new Vue({
       el: "#root",
       template:`
        <div>
            <input type="text" v-model="message">
            <button @click="addClick">submit</button>
            <ul>
                <li v-for="(item,index) in items">{{item}}<span v-on:click="hundleDelete(index)">  Delete</span></li>
            </ul>
        </div>
       `,
       data: {
           message: "",
           items: []
       },
       methods: {
            addClick() {
                this.items.push(this.message);
                this.message = "";
            },
            hundleDelete(index) {
                //alert(index);
                this.items.splice(index,1);
            }
       }
   });
   </script>

子组件与父组件之间的通信

<div id="root">
        <!-- <input type="text" v-model="message">
        <button @click="addClick">submit</button>
        <ul>
            <li v-for="item in items">{{item}}</li>
        </ul> -->
   </div> 

   <script>

    Vue.component("templete",{
        template: `<li>{{itemprops}}<span v-on:click="handleDelete(index)">Delete</span></li>`,
        props: ["itemprops","index"],//从父组件v-bind绑定中(传递到定义函数中的参数)接受父组件的参数
        /*
        data: {
            props: []
        }
        */
        methods: {//组件自身上触发事件
            handleDelete: function(index) {
                this.$emit("delete",index);
                //$emit(),向外触发事件,父组件监听,在v-bind监听emit所定义的事件,添加父组件的方法
            }
        }
    });

   var App = new Vue({
       el: "#root",
       template:`
        <div>
            <input type="text" v-model="message">
            <button v-on:click="addClick">submit</button>
            <ul>
                <templete v-for="(item,index) in items" 
                v-bind:itemprops="item" v-bind:index="index" 
                v-on:delete="handleDelete"></templete>
            </ul>
        </div>
       `,//v-bind绑定父组件向子组件传参传参,
       data: {
           message: "",
           items: []
       },
       methods: {
            addClick() {
                //alert(this.message);
                this.items.push(this.message);
                this.message = "";
            },
            handleDelete(index) {
                //console.log(argument);
                this.items.splice(index,1);
            }
       }
   });
   </script>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!