Vue笔记系列(三)基础选项

1.propsData Option全局扩展的数据传递

❤先说扩展

<body>

    <h1>propsData Option</h1>

    <hr>

    <header></header>

    <script type="text/javascript">

       var header_a = Vue.extend({

           template:`<p>{{message}}-{{a}}</p>`,

           data:function(){

               return{

                   message:"I love u"

               }

           }

       });

 

       new header_a().$mount("header");

    </script>

</body>

页面上显示I love u,这时候再加入propsData.

propsData 不是和属性有关,他用在全局扩展时进行传递数据。

 

 

<body>

    <h1>propsData Option</h1>

    <hr>

    <header></header>

    <script type="text/javascript">

       var header_a = Vue.extend({

           template:`<p>{{message}}-{{a}}</p>`,

           data:function(){

               return{

                   message:"I hate u"

               }

           },

           props:["a"]

       });

 

       new header_a({propsData:{a:1314}}).$mount("header");

    </script>

</body>

 

propsData三步解决传值:

1、在全局扩展里加入props进行接收。propsData:{a:1}

2、传递时用propsData进行传递。props:[‘a’]

3、用插值的形式写入模板。{{ a }}

此时页面上显示 I love u – 1314 传值成功

 

2. computed Option计算选项

computed 的作用主要是对原数据进行改造输出。改造输出:包括格式的编辑,大小写转换,顺序重排,添加符号……。

❤不污染原始数据的情况下,对原始数据的输出形式进行改动进而输出需要的格式和内容,在输出数据前可以轻松的改变数据。

我们先来做个读出价格的例子:一本书的原始数据是price:100    但是我们输出给用户的样子是(¥100元)。

 

主要的代码:

    <div id="app">

        {{newPrice}}

    </div>

    <script type="text/javascript">

        var app = new Vue({

            el:"#app",

            data:{

                price:"100"

            },

            computed:{

                newPrice:function(){

                    return this.price = "¥"+this.price+"元";

                }

            }

        })  

    </script>

 

❤倒序排列

HTML代码

<div id="app">

        <ul>

         <li v-for="item in Wuxia">{{item.title}}-{{item.data}}</li>

        </ul>

    </div>

 

这个例子表示,我们得到了一个新闻列表的数组,它的顺序是安装新闻时间的顺序正序排列的,也就是早反生的新闻排在前面。这是反人类的,我们需要给他反转。这时我们就可以用到我们的计算属性了。

 

javascript代码

  <script type="text/javascript">

        var newsList = [

            {title:"飞雪连天射白鹿",date:"2017/11/16"},

            {title:"笑书神侠倚碧鸳",date:"2017/11/17"},

            {title:"金庸封笔古龙逝",date:"2017/11/17"},

            {title:"江湖唯有英雄志",date:"2017/11/18"},

        ]

        var app = new Vue({

            el:"#app",

            data:{

                newsList:newsList

            },

            computed:{          

                Wuxia:function(){

                    return this.newsList.reverse();

                }

            }

        })  

    </script>

 

页面输出顺序:

  • 江湖唯有英雄志-
  • 金庸封笔古龙逝-
  • 笑书神侠倚碧鸳-
  • 飞雪连天射白鹿-

 

 

3. Methods Option方法选项

一、methods中的传值

1、在methods的方法中进行声明,比如我们给add方法加上一个num参数,就要写出add:function(num){}.

2、调用方法时直接传递,比如我们要传递2这个参数,我们在button上就直接可以写。<button @click=”add(2)”></button>.

<div id="app">

       {{a}}

       <p><button @click="add(2)">add</button></p>

    </div>

    <script type="text/javascript">

      

        var app = new Vue({

            el:"#app",

            data:{

                a:1

            },

            methods:{

                add:function(num){

                    if(num!=""){

                        this.a+=num;

                    }else{

                        this.a++;

                    }            

                }

            }  

        })  

    </script>

 

二、methods中的$event参数

传递的$event参数都是关于你点击鼠标的一些事件和属性。我们先看看传递的方法。

传递:<button @click=”add(2,$event)”>add</button> 。

 

三、native  给组件绑定构造器里的原生事件。

在实际开发中经常需要把某个按钮封装成组件,然后反复使用,如何让组件调用构造器里的方法,而不是组件里的方法。就需要用到我们的.native修饰器了。

❤自定义的组件,放在构造器里,我们通过.native的方法进行调用

 

<div id="app">

       {{a}}

       <p><button @click="add(2,$event)">add</button></p>

       <p><btn @click.native="add(3)"></btn></p>

    </div>

    <script type="text/javascript">

        var btn = {

            template:`<button>组件app</button>`

        }

      

        var app = new Vue({

            el:"#app",

            data:{

                a:1

            },

            components:{

                "btn":btn

            },

            methods:{

                add:function(num){

                    if(num!=""){

                        this.a+=num;

                    }else{

                        this.a++;

                    }

                    console.log(event);

                }

            }

          

        })  

    </script>

 

四、作用域外部调用构造器里的方法

❤等于是从div(vue)的外部通过onclick方法,调用app对象里面的

Add属性

  <div id="app">

       {{a}}

    </div>

 

    <button onclick="app.add(4)">外部add</button>

    <script type="text/javascript">

        var btn = {

            template:`<button>组件app</button>`

        }

      

        var app = new Vue({

            el:"#app",

            data:{

                a:1

            },

            components:{

                "btn":btn

            },

            methods:{

                add:function(num){

                    if(num!=""){

                        this.a+=num;

                    }else{

                        this.a++;

                    }

                    console.log(event);

                }

            }

          

        })  

    </script>

 

4. Watch选项监控数据

 

数据变化的监控经常使用,我们可以先来看一个简单的数据变化监控的例子。

Eg: 一个监控变化的案例

温度大于26度时,我们建议穿T恤短袖,温度小于26度大于0度时,我们建议穿夹克长裙,温度小于0度时我们建议穿棉衣羽绒服。

先来模拟一个温度变化的情况:我们使用按钮来加减温度。

    <div id="app">

        <p>今日温度:{{wendu}}</p>

        <p>穿衣建议:{{tips}}</p>

        <p><button @click="add">add温度</button></p>

        <p><button @click="reduce">reduce温度</button></p>

    </div>

    <script type="text/javascript">

        var app = new Vue({

            el:"#app",

            data:{

                wendu:14,

                tips:"夹克"

            },

            methods:{

                add:function(){

                    this.wendu+=5;

                },

                reduce:function(){

                    this.wendu-=5;

                }

            }

        })  

    </script>

 

然后加入了根据温度(wendu)变化。穿衣指南提示(tips)也得到变化。

    <div id="app">

        <p>今日温度:{{wendu}}</p>

        <p>穿衣建议:{{tips}}</p>

        <p><button @click="add">add温度</button></p>

        <p><button @click="reduce">reduce温度</button></p>

    </div>

    <script type="text/javascript">

        var app = new Vue({

            el:"#app",

            data:{

                wendu:14,

                tips:"穿个夹克吧老铁"

            },

            methods:{

                add:function(){

                    this.wendu+=5;

                },

                reduce:function(){

                    this.wendu-=5;

                }

            },

            watch:{

                wendu:function(newVal,oldVal){

                    if(newVal>=26){

                        this.tips="可以换短袖了"

                    }else if(newVal<26&&newVal>13){

                        this.tips="穿个夹克吧老铁"

                    }else{

                        this.tips="羽绒服羽绒服~"

                    }

                }

            }

        })  

    </script>

放在数组里的写法是:

    <div id="app">

        <p>今日温度:{{wendu}}</p>

        <p>穿衣建议:{{tips}}</p>

        <p><button @click="add">add温度</button></p>

        <p><button @click="reduce">reduce温度</button></p>

    </div>

    <script type="text/javascript">

        var tips2=["穿个夹克吧老铁","可以换短袖了","羽绒服羽绒服"]

        var app = new Vue({

            el:"#app",

            data:{

                wendu:14,

                tips:"穿个夹克吧老铁"

            },

            methods:{

                add:function(){

                    this.wendu+=5;

                },

                reduce:function(){

                    this.wendu-=5;

                }

            },

            watch:{

                wendu:function(newVal,oldVal){

                    if(newVal>=26){

                        this.tips=tips2[0]

                    }else if(newVal<26&&newVal>13){

                        this.tips=tips2[1]

                    }else{

                        this.tips=tips2[2]

                    }

                }

            }

        })  

    </script>

用实例属性写watch监控【不在构造器里面,在构造器外写】

有些时候我们会用实例属性的形式来写watch监控。也就是把我们watch写在构造器的外部,这样的好处就是降低我们程序的耦合度,使程序变的灵活。

    <div id="app">

        <p>今日温度:{{wendu}}</p>

        <p>穿衣建议:{{tips}}</p>

        <p><button @click="add">add温度</button></p>

        <p><button @click="reduce">reduce温度</button></p>

    </div>

    <script type="text/javascript">

        var tips2=["穿个夹克吧老铁","可以换短袖了","羽绒服羽绒服"]

        var app = new Vue({

            el:"#app",

            data:{

                wendu:14,

                tips:"穿个夹克吧老铁"

            },

            methods:{

                add:function(){

                    this.wendu+=5;

                },

                reduce:function(){

                    this.wendu-=5;

                }

            },

          

        })  

 

        app.$watch("wendu",function(newVal,oldVal){

            if(newVal>=26){

                        this.tips=tips2[0]

                    }else if(newVal<26&&newVal>13){

                        this.tips=tips2[1]

                    }else{

                        this.tips=tips2[2]

                    }

        })

    </script>

 

 

 

5. Mixins混入选项操作

Mixins一般有两种用途:【把公用部分提取出来】【在需要的地方混入】

1、在你已经写好了构造器后,需要增加方法或者临时的活动时使用的方法,这时用混入会减少源代码的污染。

2、很多地方都会用到的公用方法,用混入的方法可以减少代码量,实现代码重用。

一、Mixins的基本用法

Eg:我们现在有个数字点击递增的程序,假设已经完成了,这时我们希望每次数据变化时都能够在控制台打印出提示:“数据发生变化”.

<div id="app">

        {{num}}

        <p><button @click="add">add</button></p>

    </div>

    <script type="text/javascript">

        var addConsole={

            updated:function(){

                console.log("数据发生变化,变成了"+this.num);

            }

        };

      

        var app = new Vue({

            el:"#app",

            data:{

                num:1

            },

            methods:{

                add:function(){

                    this.num++;

                }

            },

          

        })  

    </script>

 

二、mixins的调用顺序

我是全局的混入

构造器里的方法,数据发生变化,变成了2

我是原生的updated

我是全局的混入

构造器里的方法,数据发生变化,变成了3

我是原生的updated

从执行的先后顺序来说,都是混入的先执行,然后构造器里的再执行,需要注意的是,这并不是方法的覆盖,而是被执行了两边。

在上边的代码的构造器里我们也加入了updated的钩子函数:

三、全局API混入方式

我们也可以定义全局的混入,这样在需要这段代码的地方直接引入js,就可以拥有这个功能了。我们来看一下全局混入的方法:

Vue.mixin({

            updated:function(){

                console.log("我是全局的混入")

            }

        });

 

全部代码:

    <div id="app">

        {{num}}

        <p><button @click="add">add</button></p>

    </div>

    <script type="text/javascript">

        var addConsole={

            updated:function(){

                console.log("构造器里的方法,数据发生变化,变成了"+this.num);

            }

        };

        Vue.mixin({

            updated:function(){

                console.log("我是全局的混入")

            }

        });

        var app = new Vue({

            el:"#app",

            data:{

                num:1

            },

            methods:{

                add:function(){

                    this.num++;

                }

            },

            updated:function(){

                console.log("我是原生的updated")

            },

            mixins:[addConsole]

        })  

    </script>

 

全局混入的执行顺序要前于混入和构造器里的方法。

 

6. Extends Option扩展选项

    <div id="app">

        <!-- {{num}} -->

        ${ num }

        <p><button @click="add">add</button></p>

    </div>

    <script type="text/javascript">

        var extendsObj={

            updated:function(){

                console.log("我是扩展的updated");

            },

            methods:{

                add:function(){

                    console.log("我是扩展的方法");

                    this.num++

                }

            }

        }

      

        var app = new Vue({

            el:"#app",

            data:{

                num:1

            },

            methods:{

                add:function(){

                    console.log("我是原生的方法")

                    this.num++;

                }

            },

            updated:function(){

                console.log("我是原生的updated")

            },

            extends:extendsObj,

            delimiters:['${','}']

        })  

    </script>

</body>

</html>

 

delimiters 选项

delimiters的作用是改变我们插值的符号。Vue默认的插值是双大括号{{}}。但有时我们会有需求更改这个插值的形式。

 

delimiters:['${','}']

 

现在插值形式就变成了${}

posted @ 2017-11-17 10:20  Jqy_姜浅予  阅读(582)  评论(0编辑  收藏  举报