美文网首页
终极VUE教程

终极VUE教程

作者: 前端组件库 | 来源:发表于2020-01-31 16:08 被阅读0次

    知识点:

    1. 数据分离,用变量显示,也可以用v-text属性
    2. 如果是其他属性要显示数据的话可以用v-bind方法
    3. 在input里可以用v-model的方法来绑定value.
    4. 用v-for进行对数组的遍历显示
    5. 用@click属性添加点击事件,方法可以直接写在里面
    6. v-if可以做为条件直接写在属性里面,条件可以是值,也可以写变量
    7. v-else没有值,直接写在属性里面
    8. 在数组里可以写些Json数据
    9. 在computed这个方法集里,可以把需要换算的公式写进去,把方法名直接写在双引号里就可以动态返回结果。
    10. methods里面可以直接写方法,方法的变量可以是computed里面的方法名,直接引用在双括号里。
    11. 创建组件,组件由一个名称和对象组成,对象里面有template,这个是要渲染在组件里的。组件里面有属性props,是一个数组,这个对应这个组件里创建的属性名称。当对这个属性传值之后,就可以在模板里进行相应的传值了。
    12. 每个模板都要有一个跟元素,否则在遍历两个或以上的数据的时候就不会显示了。
    13. 组件里的data可以是一个方法,这里可以直接写数据返回。
    14. 组件里的数据如果是重复的,那么就要有一个key,否则会报小错误。所以一般要带个唯一性的ID。写的时候例如::key="item.ID", 写在组件的属性里。
    15. 从子组件到父组件传递自定义事件
    16. 在vue里用axios来请求
    17. vue cli用法
    18. class和CSS绑定
    19. vue router

    那我们从第一个知识点开始我们的教程吧。

    创建环境,我们可以用引入CDN的方法,也可以用nodejs的NPM来做一个比较复杂点的环境,出于理解的方便,这里就直接引入了cdn的方法。然后做一个网页引入进去就可以了。

    <script src="https://cdn.bootcss.com/vue/2.6.11/vue.min.js"></script>
    

    1. 数据分离,用变量显示,也可以用v-text属性

    引入之后我们需要创建一个vue实例才能让vue发挥作用。

    我们要创建一个vue的作用域,也就是一个div然后做一个id。例如:

    <div id="app"></div>
    

    然后开始我们的实例:

    new vue({
       el:"#app"
       data:{
          title:"this is title"
       }
    });
    

    放到这里我们就可以显示了。

    <div id="app"><h1>{{title}}</h1></div>
    

    当然我们可以用另外一个方法显示。

    <div id="app"><h1 v-text="title"></h1></div>
    

    v-开头的directive还有很多。

    这两种方法其实没有上面区别。

    2. 如果是其他属性要显示数据的话可以用v-bind方法

    在vue里很多数据都是隔开的,包括属性的数据,这样我们可以动态的控制属性值。例如:

    <div id="app"><h1 title="this is title attribute" v-text="title"></h1></div>
    

    如果我们要把这个title属性的值放到vue里面的话,如何操作呢?

    我们可以用v-bind这个指令:

    <div id="app"><h1 v-bind:title="title" v-text="title"></h1></div>
    

    当然我们可以直接把v-bind这个拿掉,也可以是同样的效果。

    <div id="app"><h1 :title="title" v-text="title"></h1></div>
    

    3. 在input里可以用v-model的方法来绑定value

    通常用v-model指令来绑定input和外部的内容。

    <div id="app">
    <div v-text="title"></div>
    <input type="text" v-model="title">
    </div>
    <script>
    new Vue({
        el:"#app",
        data:{
           title:"this is the title"
        }
    })
    </script>
    

    这样即使我们改变input值,上面的内容也会跟着变。

    4.用v-for进行对数组的遍历显示

    v-for可以遍历数组,我们直接来看一个例子。

    <div id="app">
            <div class="titles">
                <ul v-for="title in titles">
                    <li>
                      {{title}}
                    </li>
                </ul>
            </div>
        </div>
    <script>
            new Vue({
                el:"#app",
                data:{
                   titles:['title1','title2','title3']
                }
            });
        </script>
    

    5. 用@click属性添加点击事件,方法可以直接写在里面

    我们可以用上面的例子直接写一个todo list的APP

    <div id="app">
            <div class="titles">
                <ul v-for="title in titles">
                    <li>
                      {{title}}
                    </li>
                </ul>
                <input v-model="title">
                <input type="button" @click="titles.push(title)" value="add title">
            </div>
        </div>
    <script>
            new Vue({
                el:"#app",
                data:{
                   title:'', 
                   titles:['title1','title2','title3']
                }
            });
        </script>
    

    当我们添加title4到input里面的时候,里面就多了一个title4的元素。
    @click指令是一个引发事件的指令,我们稍后会提到

    6. v-if可以做为条件直接写在属性里面,条件可以是值,也可以写变量

    v-if是判断属性值的true或者false来决定下一个语句是否执行

    <div id="app">
            <div class="titles">
                <div v-if="hidden">display text</div>
            </div>
        </div>
    <script>
            new Vue({
                el:"#app",
                data:{
                   hidden:true
                }
            });
        </script>
    

    7. v-else没有值,直接写在属性里面

    当然v-if可以和v-else配合使用。所以我们可以写成:

    <div id="app">
            <div class="titles">
                <div v-if="hidden">display text</div>
                <div v-else>another</div>
            </div>
        </div>
    

    8. 在数组里可以写些Json数据

    <div id="app">
            <div v-for="title in titles">
                <div>{{title.title}}</div>
                <div v-if="title.checked">checked</div>
            </div>
        </div>
     <script>
            new Vue({
                el:"#app",
                data:{
                    titles:[
                       {title:"title1",checked:true},
                       {title:"title2",checked:false}
                   ]
                }
            });
        </script>
    

    9. 在computed这个方法集里,可以把需要换算的算式写进去,把方法名直接写在双引号里就可以动态返回结果。

    可以把computed属性,当作是data(数据)的延申,只是动态返回结果而已。

    我们来看看下这个简单的税率结算器:

    <div id="app">
            <div>价格:{{price}}</div>
            <input type="text" v-model="price">
            <div>税:{{tax}}</div>
            <div>总额:{{total}}</div>
        </div>
    
    <script>
            new Vue({
                el:"#app",
                data:{
                    price:''
                },
                computed:{
                    tax:function(){
                        return this.price*0.1;
                    },
    
                    total:function(){
                        return parseInt(this.price)+parseInt(this.tax);
                   }
                }
            });
        </script>
    

    10. methods里面可以直接写方法,方法的变量可以是computed里面的方法名,直接引用在双括号里。

    我们可以稍微修改下上面的例子,在每个数字签名加一个货币符号,比如$.
    methods其实跟computed一样是一个属性,写法一样, 我们可以直接把方法的名称和变量放在里面。如:

    <div id="app">
    
            <div>价格:{{formated(price)}}</div>
            <input type="text" v-model="price">
            <div>税:{{formated(tax)}}</div>
            <div>总额:{{formated(total)}}</div>
    
       </div>
    new Vue({
                el:"#app",
                data:{
                    price:''
                },
                methods:{
    
                    formated:function(price){
                        return '$'+price;
                    }
    
                },
                computed:{
                    tax:function(){
                        return this.price*0.1;
                    },
    
                    total:function(){
                        return parseInt(this.price)+parseInt(this.tax);
                   }
                }
            })
    
    1. 创建组件,组件由一个名称和对象组成,对象里面有template,这个是要渲染在组件里的。组件里面有属性props,是一个数组,这个对应这个组件里创建的属性名称。当对这个属性传值之后,就可以在模板里进行相应的传值了。

    组件就像视图的一部分,可以把它分离出来,如:

    <componentOne></componentOne>
    

    然后我们可以在这里赋予它新的数据,并且可以把模板的部分提取出来,这样使得遍历数据这种任务变得很简单。定义上面得这种组件得方法很简单。组件里面有很多属性,可以分为两部分,第一个是名称,第二个是一个对象,里面包含其他得属性,如属性,模板,数据等。

    Vue.components('componentOne', {
        props:[],
        template:``,
        data:function(){
           return "";
        }
    })
    

    如果没有引入vue并且没有实例化得话组件肯定是不能用得。因为只有这样,实例化得数据才能用到组件里面。

    new Vue({
                el:"#app",
                data:{
                    
                }
            })
    

    在component里面,data必须是一个方法,因为每个component必须有它得作用域。

    <div id="app">
            <cone v-for="blog in blogs" :blog="blog"></cone>
     </div>
    Vue.component("cone", {
                props:['blog'],
                template:`
                  <div>
                    <p>{{blog.title}}</p>
                    <p @click="toggle = ! toggle">details</p>
                    <p v-if="toggle">{{blog.content}}</p>
                  </div>  
                `,
                data:function(){
                    return {
                        toggle:false
                    }
                }
            });
            
            new Vue({
                el:"#app",
                data:{
                    blogs:[
                        {title:'title1', content:'this is the content 1'},
                        {title:'title2', content:'this is the content 2'}
                    ] 
                }
            })
    
    1. 在vue里用axios来请求
      我们可以用axios来做http get或者post请求到API接口来返回数据与vuejs结合使用。

    首先引入axios的CDN。

    <script src="https://cdn.bootcss.com/axios/0.19.2/axios.min.js"></script>
    

    说到vue的生命周期,mounted应该是最重要的一个,mounted表明当vue载入的时候第一个要执行的程序。

    <div id="app">
    <ul v-for="post in posts">
    <li v-text="post.title"></li>
    <p v-text="post.body"></p>
    </ul>
    </div>

    <script>

        new Vue({
           el:"#app",
           mounted:function(){
               axios.get('https://jsonplaceholder.typicode.com/posts').then((response) => this.posts = response.data).catch((error) => console.log(error));
           },
           data:{
               posts:[]
           }
        
        });
    
    </script>
    
    
    ## FAQ:
    1. Firefox错误:Components 对象已不赞成使用,它很快就会被移除。
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:终极VUE教程

          本文链接:https://www.haomeiwen.com/subject/ykbkoctx.html