1. 程式人生 > 其它 ><六>元件的相關屬性

<六>元件的相關屬性

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>