最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue学习笔记之特殊属性篇(key&ref&is)

    正文概述 掘金(isisxu)   2021-02-01   495

    1. key属性

    • TODO:后面补充,这个需要结合diff算法原理进行说明

    2. ref属性

    定义:如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例

    作用:简单说就是给子组件上绑定ref,则父组件就可以通过this.$ref.子组件绑定的ref的值获取到子组件的实例

    this.$ref结构:默认是空对象,当在子组件上绑定ref属性时,this.$refs的结构就变成{ 绑定的ref属性: 对应的子组件 }

    注意点ref 需要在dom渲染完成后才会有,在使用的时候确保dom已经渲染完成。比如在生命周期 mounted(){} 钩子中调用,或者在 this.$nextTick(()=>{}) 中调用

    2.1 通过ref直接访问dom元素

    // 示例1:ref访问dom元素
    <body>
        <div id="app">
          	// 给p元素绑定ref属性,则父组件vm实例可以通过vm.$ref.pref引用到p元素进而操作p元素
            <p ref="pref" attr="ppp">我是p元素</p>
            <div>
                {{ getElement() }}
            </div>
        </div>
        <script>
            var vm = new Vue({
                el: '#app',
                methods: {
                    getElement() {
                        // this.$refs.pref指向p元素
                        // vm.$refs.pref.getAttribute('attr')可以获取到p元素上的attr属性值
                        return this.$refs.pref
                    }
                }
            })
        </script>
    </body>
    
    

    2.2 通过ref直接访问子组件实例

    组件不是DOM元素,是没有dom元素的自带属性的,比如没有OffsetTop等,无法通过 点 .OffsetTop来获取的。所以如果想操作自定义组件的dom相关属性,就需要通过$el来获取组件中的DOM元素 this.$refs.refxxx.$el.offsetTop

    // 示例2:通过ref访问子组件实例
    <div id="app">
      <cpn ref="cpnRef"></cpn>
      <button @click="getcpn">btn</button>
      <p>{{ msg }}</p>
    </div>
    
    <script>
      var vm = new Vue({
        el: '#app',
        data() {
          return {
            msg: ''
          }
        },
        components: {
          cpn: {
            template: '<div>我是cpn组件</div>',
            data() {
              return {
                cpnMsg: "我是cpn组件的cpnMsg"
              }
            }
          }
        },
        methods: {
          getcpn() {
            // this.$refs.cpnRef指向cpn组件实例;可以简单调用cpn组件的属性或者方法
            // this.$refs.cpnRef.cpnMsg 获取到cpn子组件的属性值
            this.msg = this.$refs.cpnRef.cpnMsg
          }
        }
    
      })
    </script>
    

    3. is属性

    • 给内置的component元素组件绑定is属性可以达到动态组件的效果
    <body>
        <div id='app'>
            <div>
                <!-- 注意 currentTab = tab是内联js语句,执行后currentTab发生变化触发currentTabComponent -->
                <button v-for="tab in tabs" @click="currentTab = tab">
                    {{ tab }}
                </button>
                <!-- component为vue的内置组件和特殊属性is搭配起来表示
                    根据currentTabComponent的变化进而渲染成不同的组件,完全替换掉内置的component组件
                -->
                <component :is="currentTabComponent"></component>
            </div>
        </div>
    
        <script>
            Vue.component("home", {
                template: "<div>Home component</div>"
            });
            Vue.component("posts", {
                template: "<div>Posts component</div>"
            });
            new Vue({
                el: "#app",
                data: {
                    currentTab: "Home",
                    tabs: ["Home", "Posts"]
                },
                computed: {
                    currentTabComponent: function () {
                        return this.currentTab.toLowerCase();
                    }
                }
            });
        </script>
    </body>
    

    参考

    www.cnblogs.com/hope192168/…


    起源地下载网 » vue学习笔记之特殊属性篇(key&ref&is)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元