zoukankan      html  css  js  c++  java
  • vue组件的使用1

    创建vue组件,看了别人的教程 http://www.cnblogs.com/keepfool/p/5625583.html,自己也总结一下

    一、’创建vue组件有四个步骤:

     全局组件

        1.先命名,用Vue.extend()构建一个你需要渲染的html;创建一个模版

        2.调用Vue.component('Html里自己创建的标签',1步骤中创建的构造器名称);注册

        3.创建一个vue实例,让其他的挂载在其标签下面;

        4.html中写自己要创建的标签

        <div id="app1">
            <my-component></my-component>
            
        </div>
        <div id="app2">
            <my-component></my-component>
        </div>
         <my-component></my-component>
        <script>
           //first:creat a 组件构造器
            var myComponent=Vue.extend({
                template:'<div>This is my first component!</div>'
            })
             //2.注册组件,并制定组件的标签,组件的HTML标签为,<my-component>
                 Vue.component('my-component',myComponent)
    
            var app1=new Vue({
                el:'#app1'
            });
            var app2=new Vue({
                el:'#app2'
            })
        </script>

    二、局部组件

        在vue实例下面注册component,用components代替上面第二部的Vue.component

    <body>
       <div id="app">
            <my-component></my-component>
       </div>
    </body>
    <script>
        var myComponent=Vue.extend({
            template:'<div>This is my first component!</div>'
        })
    
        new Vue({
           el:'#app',
           components:{
    'my-component':myComponent //这个标签下是局部的,那别的vue实例下就不能用 } }); </script>

    实现后的状态是原来的自己创建的标签被替换成我vue.extend中的html

    三、父子关系

      要在一个组件中使用另外一个组件,这就存在一个父子关系~基本子组件放在父组件里面

    <body>
       <div id="app">
             <parent-component></parent-component>
       </div>
    </body>
    <script>
       //父子关系
     
        // 先构造子元素
        var Child=Vue.extend({
            template:'<i>This is a Child!</i>'
        })
    
          // 子级注册都是在父级构造的里面,
        var Parent=Vue.extend({
            template:'<span>This is Parent!</span><child-component></child-component>',
            components:{
                'child-component':Child
            }
        })
           
        Vue.component('parent-component',Parent)
        new Vue({
            el:'#app'
        })
    </script>

    四、发现新大陆 不需要那么多步骤

            省掉了第一步的构造~自动内部构造,将构造和注册一起使用

    全局

     Vue.component('parent-component',{
        template:'<div>This is the first component!'
     })
      new Vue({
          el:'#app'
      })

        在选项对象的components属性中实现局部注册:

    var vm2 = new Vue({
        el: '#app2',
        components: {
            // 局部注册,my-component2是标签名称
            'my-component2': {
                template: '<div>This is the second component!</div>'
            },
            // 局部注册,my-component3是标签名称
            'my-component3': {
                template: '<div>This is the third component!</div>'
            }
        }
    })

    五、js和html分开

        这边分开的意义还不知道,还有我写到复杂的东西怎么办呢

    <body>
       <div id="app">
             <my-component></my-component>
          
       </div>
    
       <script type="text/x-template" id="myComponent"> //type指定为text/x-template
            <div>This is a component!</div>
       </script>
    </body>
    <script>
       Vue.component('my-component',{
           template:'#myComponent'   //这边写的是js的ID
       })
       new Vue({
           el:'#app'
       })
    </script>

    引用了template标签

    <body>
       <div id="app">
             <my-component></my-component>
          
       </div>
    <!-- 这边引用了一个template标签 不需要再写js的text -->
       <template id="myComponent">   
            <div>This is a component!</div>
       </template>
    </body>
    <script>
       Vue.component('my-component',{
           template:'#myComponent'   //这边写的是js的ID
       })
       new Vue({
           el:'#app'
       })
    </script>

    在定义组件的选项时,data和el选项必须使用函数。

    下面的代码在执行时,浏览器会提出一个错误

     Vue.component('my-component',{
              data:{
                  a:1
              }
       })

     昨天晚上

       

    <body>
     <div id="app">
         <my-component v-bind:my-name="name" v-bind:my-age="age"></my-component>
     </div>
         <template id="myComponent">
             <table>
                 <tr>
                     <th colspan="2">
                      子组件数据
                     </th>
                 </tr>
                 <tr>
                     <td>my name</td>
                     <td>{{myName}}</td>
                 </tr>
                 <tr>
                     <td>my age</td>
                     <td>{{myAge}}</td>
                 </tr>
             </table>
         </template>
    
    </body>
    <script>
         var vm=new Vue({
             el:'#app',
             data:{
                 name:'keepfool',
                 age:28
             },
             components:{
                 'my-component':{
                     template:'#myComponent',
                     props:['myName','myAge']
                 }
             }
         })
    </script>

     接下来写的是那篇博文最后写的那个小例子

       完整代码,实现一个查询的功能

    <body>
         <div id="app">
             <div id="searchBar">
                 Search <input type="text" v-model="searchQuery">
             </div>
             <simple-grid :data="gridData" :columns="gridColumns" :filter-Key="searchQuery"></simple-grid>
         </div>
         
          <template id="grid-template">
               <table>
                   <thead>
                       <tr>
                           <th v-for="col in columns">
                               {{col|capitalize}}   <!-- 过滤器,将所有文字过滤为首字母大写 -->
                           </th>
                       </tr>
                   </thead>
                   <tbody>
                       <tr v-for="entry in data|filterBy filterKey">
                           <td v-for="col in columns">
                               {{entry[col]}}    <!-- 渲染entry中的数据 -->
                           </td>
                       </tr>
                   </tbody>
               </table>
          </template>
    
    
    </body>
    <script>
    
       var demo=new Vue({
           el:'#app',
           data:{
               searchQuery:'',
               gridColumns:['name','age','sex'],
               gridData:[{
                   name:'Jack',
                   age:'30',
                   sex:'Male'
               },{
                name:'Bill',
                   age:'26',
                   sex:'Male'
               },{
                name:'Tracy',
                   age:'22',
                   sex:'Female'
               },{
                name:'Chris',
                   age:'36',
                   sex:'Male'
               }]
           },
           components:{            /*components中定义了父组件中准备传入的数据*/
               'simple-grid':{       /*要插入的位置*/
               template:'#grid-template',      /*子组件的位置*/
               props:{               /*父组件数据往子组件传入*/
                   data:Array,    /*这边定义了数据的格式*/
                   columns:Array,
                   filterKey:String
               }
           }
               }
       })
    </script>
  • 相关阅读:
    SQLite-SQLiteDatabase 数据库实例练习
    全局配置一个ajax的错误监控
    文件上传&&验证文件格式
    CSS3 resize 属性
    select change()
    window.location.Reload()和window.location.href 区别
    条件检索
    jQuery $.ajax传递数组的traditional参数传递必须true 对象的序列化
    jquery中attr方法和prop方法的区别
    resize
  • 原文地址:https://www.cnblogs.com/hemude7788/p/5937202.html
Copyright © 2011-2022 走看看