<六>组件的相关属性

1、is属性:通过is动态绑定组件名称,可以动态切换显示的组件

<body>
      <div id="app">
        <button @click='changeName'>更改名称</button>
        <component :is='name'></component>
      </div>
    </div>
    
    <script src="vue.js"></script>
    <script>
      Vue.component('name1',{
          template:`
          <div>
              name1
          </div>
          `
      });
      Vue.component('name2',{
          template:`
          <div>
             name2
          </div>
          `
      })
      var vm = new Vue({
        el: '#app',
        data: {
          name:'name2'
        },
        methods: {
          changeName: function() {
              this.name = this.name === 'name1'?'name2':'name1';
          }
        }
      })
  </script>

2、keep-alive标签:被keep-alive元素包裹的组件会被缓存,缓存之后组件重新渲染时会直接从缓存中获取,避免了每次组件都重新渲染

我们将上面的例子改一下,在组件渲染的时候加上log记录一下

<body>
      <div id="app">
        <button @click='changeName'>更改名称</button>
        <keep-alive>
          <component :is='name'></component>
       </keep-alive>
      </div>
    </div>
    
    <script src="vue.js"></script>
    <script>
      Vue.component('name1',{
          template:`
          <div>
              name1
          </div>
          `,
          created: function(){
            console.log('name1')//多次渲染则多次输出
          }
      });
      Vue.component('name2',{
          template:`
          <div>
             name2
          </div>
          `,
          created: function(){
            console.log('name2')// 多次渲染则多次输出
          }
      })
      var vm = new Vue({
        el: '#app',
        data: {
          name:'name2'
        },
        methods: {
          changeName: function() {
              this.name = this.name === 'name1'?'name2':'name1';
          }
        }
      })
  </script>

结果:点击多次按钮,log只输出一次即可证明,组件只渲染了一次

 

 

 3、refs属性:js获取dom元素的时候,都是使用document.getelementbyid("xx")这种获取,vue提供了这个属性,获取dom元素,这样就可以根据这个属性进行修改dom样式了。

    <body>
      <div id="app">
        <button @click='changeName'>更改名称</button>
        <div ref='demo'></div>
      </div>
    </div>
    
    <script src="vue.js"></script>
    <script>
      var vm = new Vue({
        el: '#app',
        data: {  
          name:'name1'      
        },
        methods: {
          changeName: function() {
             this.$refs.demo.innerText=this.name;         
          }
        }
      })
  </script>

ref也可以用来获取组件的对象。

  <body>
      <div id="app">
        <button @click='changeName'>更改名称</button>     
        <name1 ref='demo'>  </name1>
        
      </div>
    </div>
    
    <script src="vue.js"></script>
    <script>
      Vue.component('name1',{
          template:`
          <div>
              name1
          </div>
          `,
          data:function(){return {msg:'name1'}},     
      });
      
      var vm = new Vue({
        el: '#app',
        data: {
          
        },
       // component:{child:name1}
       // ,
        methods: {
          changeName: function() {
              alert(this.$refs.demo.msg);
          }
        }
      })
  </script>

 

posted @ 2021-12-11 18:49  许轩霖  阅读(77)  评论(0编辑  收藏  举报