• 前端——框架——Vue——DOM


      本篇介绍Vue实例与DOM之间的映射。包含四个部分,整个结构的映射,元素节点的映射,文本节点的映射,属性的映射。

    1、 整个结构

    每个Vue唯一对应一个DOM结构。它的实现方式有三种,

    第一种设置组件的template属性,它的值为html字符串,不建议使用。示例如下:

    Vue.component('blog-post', {
      template: '<h3>{{ postTitle }}</h3>'
    })
    

      第二种设置组件的el属性,类似于Jquery的选择器,通常使用ID选择器。为页面与Vue的混合形式

    <div id="app">
      {{ message }}
    </div>
    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      }
    })
    

      第三种在编写当个页面时,将整个DOM结构用template标签包裹起来。最常见的形式。纯Vue形式。

    <template>
      <div>This will be pre-compiled</div>
    </template>
    

    2、文本节点

    使用{{ vue.data.prop }}的形式,例如<div id="app"> {{ message }}</div>。message表示Vue对象的属性。

    3、元素节点

    使用v-html指令,例如<p v-html=”rawHtml”></p>。rawHtml为Vue的属性,是不可修改的html字符串。

    4、属性

    使用v-bind指令,或缩写形式。例如v-bind:attr=”prop”,prop为Vue的属性。缩写形式去掉v-bind。

    5、slot

    不限定内容,可以是任意的DOM结构。它的知识点有四部分。使用slot,设置默认值,给slot命名。slot作用域

    5.1  使用

    在子组件的DOM结构添加<slot><slot>之后,在父组件中可以自定义组件的内容。

    示例如下:

    // 子组件
    Vue.component('random-div',{
      // 随意的div结构
      template:'<div><slot></slot></div>'
    })
    // 父组件
    <random-div>
      <template v-slot>
      <!-- 自定义内容 -->
      </template>
    </random-div>
    

    5.2   默认值

    在子组件<slot></slot>中添加的内容为组件的默认值。

    // 子组件
    Vue.component('random-div',{
      // 随意的div结构
      template:'<div><slot>默认值</slot></div>'
    })
    

      当父组件中存在自定义内容时,会被替换。

    5.3   作用域

    父组件中只能使用父组件的属性,子组件只能使用子组件的属性。自定义内容中若引用子组件中的属性会抛错。

    若想在父组件中使用子组件的属性,需要经过两个步骤

    第一步,将子组件的属性绑定为slot的属性,示例中将子组件的childCompProp绑定为slot的slotProps属性。绑定多个时,可以将其封装为对象。

    第二步,在父组件中,在自定义内容中使用slot的属性。

    // 其中childCompProp表示子组件的属性
    // slotProps为自定义的slot属性名
    <slot v-bind:childCompProp="slotProps">
    
    </slot>
    
    // 其中slotData为自定义名称,它表示slot的所有属性
    // slotProps必须与子组件的名称相同,这里引用子组件中的slotProps
    <random-div>
    	<template v-slot:default="slotData">
    		{{ slotData.slotProps}}
    	</template>
    </random-div>
    

    5.4   命名

    当存在多个slot时,可以使用name属性为slot命名。

    // 子组件
    Vue.component('random-div',{
      // 随意的div结构
      template:'<div><slot>默认值</slot></div>'
    })
    

      name的默认值为”default”。v-slot:name的形式可以缩写为#name。没有name时可以缩写为#。

  • 相关阅读:
    数码管模块
    iis报mmc检测错误解决办法
    图片显示加时间戳
    C#.Net上传文件大小限制设置
    DoNet 打包,能够自动生成数据库(可以执行某些exe,vbs文件)
    aspx模式窗口
    aspx页面不能及时更新数据
    aspx 页面提交造成页面样式混乱
    MSSQL中返回刚插入记录的ID
    修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
  • 原文地址:https://www.cnblogs.com/rain144576/p/14752904.html
Copyright © 2020-2023  润新知