冇事来学系--Vue2.0 组件开发详讲(下)

简介: 组件的自定义属性propsprops节点是和data、methods等同级的节点,值是一个数组

组件的自定义属性props


props节点是和data、methods等同级的节点,值是一个数组

<script>
  // 基本语法
  export default {
    // 组件的自定义属性,允许自定义当前组件指定数据的初始值
    props: ['自定义的属性A','自定义的属性B','其他自定义的属性...'],
    // 组件的私有数据
    data(){
      return{
        // 数据
      }
    }
  }
</script>


使用方法:

  1. 在封装组件的时候上写一个props节点,并且设置一个自定义的属性

网络异常,图片无法展示
|

通过打印this会发现,this指向当前Vue组件的实例,init是对象里面的一个属性,因此可以通过this.init访问

  1. 使用上面的组件的时候,在标签内为上面自定义的属性设置属性值,即是为这个组件指定了一个初始值(注意:指定的这个值是字符串


网络异常,图片无法展示
|

只需要在设置自定义属性的时候,使用v-bind绑定属性,这样赋值的就是数字型(因为使用v-bind绑定属性时,写的是js代码,js代码中的字符串要加引号,即" '9' ")

网络异常,图片无法展示
|

  1. 在封装的组件上将要使用的初始值渲染到指定的位置

网络异常,图片无法展示
|

props中的数据,可以直接在模板结构中被使用


注意!props节点设置的数据是"只读"的!(可以修改成功,但是会报错)。若想修改props节点里面数据的值,可以将props里面的数据转存到data节点里面,因为data节点里面的数据都是可读可写的(props节点只负责设置初始值,改写的数据是data里面的数据)


props的default默认值

在声明自定义属性时,可以通过default来定义属性的默认值

<script>
  export default {
    props: {      // 注意这里的props节点里面指向的是 对象 而不是数组
      init: {     // 自定义属性init,指向一个配置对象
        // 用default属性定义 自定义属性的默认值
        default: 0
        // 若外界使用该组件的时候没有传入init属性的值,则默认值生效,为0
      }
    }
  }
</script>


props的type值类型


在声明自定义属性时,可以通过type来定义属性的值类型

<script>
  export default {
    props: {
      init{
        // default属性 定义自定义属性的默认值
        default: 0,
        // 用type属性 定义自定义属性的值类型
        // 如果传递过来的值不符合此类型,则会在终端报错
        type: Number    // init的值类型必须是Number数字型
      }
    }
  }
</script>

props的required必填项

必填项校验required设置为true,则在使用组件的时候自定义属性必须传值,否则就报错 (即使有默认值也会报错)

非单文件组件和单文件组件


非单文件组件:一个文件中包含n个组件 ---> a.html

单文件组件:一个文件中只包含一个组件 ---> a.vue

<!-- 准备一个容器 -->
<div id="#root">
  <student></student>
</div>
<script>
  // 1、创建student组件 Vue的extend方法
  const student = Vue.extend({
    name: 'student',        // 创建组件时的name属性指定组件在 开发者工具 中呈现的名字
    template: `
      <div></div>
    `,      // template节点,配置组件的HTML结构,必须要有div容器(用模板字符串写比较方便)
    data(){           // 数据必须使用函数写法
      return {}       // return返回一个数据对象
    },
    methods: {}
  })
  // 简写方法 省略了Vue的extend方法
  const student = {}
  // 2、注册组件,在vm实例中(局部组件)
  const vm = new Vue({
    el: '#root'
    components: {       // 注册组件,components节点
      student // studnet: student简写   注册的时候写的什么名字,使用的时候就要写什么名字
    }
  })
  // 3、使用组件则直接写组件标签<student></student>
  // 注册全局组件  在vm实例外
  // Vue.component('组件名称', 组件)   
  Vue.component('std', student)
</script>


组件的嵌套


在一个组件中注册和使用另一个组件,这就有了父子关系

<body>
  <div id="root">
    <!-- 使用组件 -->
  </div>
  <script>
    // 定义student组件    子组件必须定义在父组件之前,不然报错
    const student = new Vue.extend({
    name: 'student',        // 创建组件时的name属性指定组件在开发者工具中呈现的名字
    template: `
      <div>
        <h2>学生名称:{{name}}</h2>
        <h2>学生年龄:{{age}}</h2>
      </div>
    `,      // template节点,配置组件的HTML结构,必须有div容器(用模板字符串写比较方便)
    data(){           // 数据必须使用函数写法
      return {
        name: '张三',
        age: 18
      }       // return返回一个数据对象
    }
  })
    // 定义school组件
    const school = new Vue.extend({
    template: `
      <div>
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
        <student></student>     <!-- 子组件的使用也要在父组件中 -->
      </div>
    `,      // template节点,配置组件的HTML结构,必须有div容器(用模板字符串写比较方便)
    data(){           // 数据必须使用函数写法
      return {
        name: '叶集大学',
        address: '赛博坦'
      }       // return返回一个数据对象
    },
    components: {     // 子组件要注册在父组件里面
      student
    }
  })
    const vm = new Vue({
      el: '#root'
      components: {       // 注册组件,components节点
        school
      }
    })
  </script>
</body>


目录
相关文章
|
7月前
|
JavaScript API 开发工具
Vue3甜点探秘:史上最甜的语法糖
Vue3甜点探秘:史上最甜的语法糖
49 4
|
JavaScript 容器
冇事来学系--Vue2.0中VueComponent(组件)
组件的本质 组件的本质就是一个 构造函数 f VueComponent (options) { this._init(options); } ,是Vue.extend( )生成的 当我们使用组件时,写了组件的标签,Vue解析时就会创建该组件的实例对象,即Vue帮我们执行了这一句代码 new VueComponent(options) (options就是我们写的data、methods、computed等数据) 每次调用Vue.extend( )时,返回的都是一个全新的VueComponent
311 0
|
JavaScript 前端开发
冇事来学系--Vue2.0中讲讲生命周期吧
生命周期(Life Cycle) 是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段。 生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行 。是vue在关键时刻帮我们调用的一些特殊名字的函数。 生命周期函数中的this指向的是vm或组件实例对象
179 0
|
前端开发 JavaScript 数据库
冇事来学系--Vue2.0中Promise详讲(上)
回调地狱 多层回调函数的相互嵌套,就形成了回调地狱
309 0
|
前端开发
冇事来学系--Vue2.0中Promise详讲(下)
then-fs的基本使用 可以通过node下载then-fs。 npm install then-fs
167 0
|
存储 JavaScript 前端开发
冇事来学系--Vue2.0中vuex(上)
专门在Vue中实现集中式状态 (数据) 管理的一个Vue插件,对vue中多个组件的共享状态进行集中式的管理(读/写) ,适用于任意组件之间的通信
186 0
|
存储 前端开发 JavaScript
冇事来学系--Vue2.0中路由Router
路由的概念与原理 路由(router),就是对应关系。即 Hash地址(锚点链接) 与 组件 之间的对应关系 注意:锚点链接的特点-->不会刷新页面,但是会产生浏览历史
205 0
|
JavaScript 前端开发 API
vue3,你还为状态为何物而发愁吗?(一)
为啥需要状态?因为组件划分的非常原子化(细腻),所以造成了很多的组件,那么组件之间就需要一种“通讯方式”,这个就是状态了。不仅仅是传递数据,还可以实现事件总线。
vue3,你还为状态为何物而发愁吗?(一)
|
JavaScript
vue3,你还为状态为何物而发愁吗?(二)
为啥需要状态?因为组件划分的非常原子化(细腻),所以造成了很多的组件,那么组件之间就需要一种“通讯方式”,这个就是状态了。不仅仅是传递数据,还可以实现事件总线。
vue3,你还为状态为何物而发愁吗?(二)
|
存储 JavaScript 前端开发
冇事来学系--Vue2.0 组件开发详讲(上)
组件化开发 根据封装的思想,把页面上可重复用的UI结构封装为组件,从而方便项目的开发和维护 组件-->实现应用中局部功能代码和资源的集合
174 0