美文网首页
vue.js入门(二,引入组件)

vue.js入门(二,引入组件)

作者: 感觉不错哦 | 来源:发表于2019-10-08 17:25 被阅读0次

安装 vue脚手架 vue-cli npm install -g vue-cli 注意这里是2.x版本 3.x后面再讲


这里的话 是否安装router 打y 前面默认回车就行

敲入代码就可以了


那么在config目录下的index.js可以修改相关端口与是否自动启动浏览器,这个就随意了,目录文件不解释

如何引入组件

首先在components中新建一个vue文件,顺便清空一下主组件App.vue的内容,因为之前安装router的话App.vue中是使用router的方式引入别的组件的,待会使用es6的方式引入组件

在Test.vue中随意敲点内容


在App.vue中使用import 引入组件,引入之后需要注意的就是一定要在引入的vue文件中注册,也就是下方的components对象中,那么原始写法是{name:template},使用ES6写法省略了冒号,然后就可以在上方使用了,并可以重复使用,那么CLI是有热更新的,只需要保存代码浏览器即可自动更新

这样看起来是不是就像上篇写的例子了,搬过来再写一遍

<template>
  <div id="app">
    <div>
      <input type="text" v-model="info">
      <button @click="handleClick">添加</button>
    </div>
    <ul>
      <Test v-for="(item,index) in list" :key="index" :item="item"></Test>
    </ul>
    
  </div>
</template>

<script>
import Test from './components/Test'
export default {
  name: 'App',
  data(){
    return {
      list:[],
      info:''
    }
  },
  methods:{
    handleClick(){
      this.list.push(this.info)
      this.info=''
    }
  },
  components:{
      Test
  }
}
</script>

<style>

</style>

Test.vue中也修改一下


那么效果也OK了~可以看到在这个例子里,Test.vue嵌套在了App.vue中,那么此时App.vue就是Test.vue的父组件,Test.vue就是子组件了,这个概念可以吸收一下!可以看到子组件中是没有数据的,数据在父组件中,把其他组件的数据传递给自己这个过程叫组件间的通信。那么刚才这个过程可以理解为父子组件之前的通信,emmm 先点到为止

那么在传递数据的时候,首先传递的值需要v-bind(:)来绑定,同时在接收数据的组件中通过props来接收并用{{}}来解析,比较好理解,如果再加一个值呢?

子组件只需

<template>
    <div>
        <li>{{item}}---{{test}}</li>
    </div>
</template>

<script>
export default {
props:['item','test']
}
</script>

<style>

</style>

这里需要注意的是,在template中只能有一个根元素,也就是只有一个父元素,建议直接包个div就行

那么除了props传值还可以使用插槽solt传递


可以看到我取消了:item="item" 绑定,意味着子组件是没有属性可以接受的,那么在子组件中就需要使用slot来接收内容

<template>
    <div>
        <li>
            <slot></slot>
        </li>
    </div>
</template>

<script>
export default {

}
</script>

<style>

</style>

使用slot标签,效果相同,甚至可以传递标签,比如说


那么如何显示不同的slot呢?使用v-slot

<template>
    <div>
        <li>
            <slot name="item"></slot>
        </li>
    </div>
</template>

子组件中使用name来显示不同的内容


打开页面发现报了一个错,这个问题呢是 新语法(貌似是2.6的语法,没去关注)的问题,就是v-slot只能在template标签中


子组件不变,包个template传递即可,这个name传递称之为具名插槽
那么这里展示一下插槽的子组件返回父组件信息的操作,随便过一下(由于本人经验太少,可能这种通信方式用的少,并不常见吧)

<template>
    <div>
        
        <li>
            <input type="checkbox" v-model="checked"/>
            <slot name="item" v-bind="{checked}"></slot>
        </li>
    </div>
</template>

<script>
export default {
   data(){
       return{
           checked:false,
       }
   }
}
</script>

<style>

</style>

首先在子组件中,双向绑定一个布尔值,绑定在checked判断,默认false,每个input改变的都是自己返回的数据,这就是为什么data是一个函数的原因!在slot标签绑定一个对象,此处是缩写,也就是check:check,这个要习惯,不然会懵逼

      <Test v-for="(item,index) in list" v-bind:key="index">
           <template v-slot:item="itemProps" >
             <span   :style="{fontSize:'20px',color:itemProps.checked?'red':'blue'}">{{item}}</span>
           </template>
      </Test>

这里几个点注意,首先是v-slot:item 等号后面就是子组件返回的对象,准确的说是json
这里把style写成绑定状态,由于jsx模板的原因css需要使用驼峰写法,后面跟一个三元,看不懂后面会细讲,了解一下就行

那么此时效果就是这样

相关文章

  • vue.js入门(二,引入组件)

    安装 vue脚手架 vue-cli npm install -g vue-cli 注意这里是2.x版本 3...

  • Vue学习笔记入门篇——组件的使用

    本文为转载,原文:Vue学习笔记入门篇——组件的使用 组件定义 组件 (Component) 是 Vue.js 最...

  • vue相关

    vue相关 vue入门 下载vue.js 创建静态web项目 将vue.js导入项目 编写hello页面,引入vu...

  • [vue]-No.03

    [2017.03.16] 安装vue:nmp install vue;在页面中引入vue.js: 入门小例子: ...

  • [Vue.js] 引入组件

  • 2018-09-11 Vue day01

    1、Git2、Vue入门学习(练习)注:先引入vue.js(1)入门练习 (2)练习2 (3)练习3

  • vue组件之构建

    关键词:构建组件 引入vue.js* 全局组件 模板方式搭建 注册使用 注意 组件只能有一个根元素 全局组件代码一...

  • Vue.js开发常见问题解析

    此前的Vue.js系列文章: Vue.js常用开发知识简要入门(一) Vue.js常用开发知识简要入门(二) Vu...

  • VUE-1:基础、指令、数据

    vue.js `vue.js`是一套用于构建用户界面的渐进式框架 渐进式 Vue核心 -声明式渲染 -组件 引入...

  • vue 基础

    vue.js vue.js 是一套用于构建用户界面的渐进式框架 渐进式 Vue 核心 声明式渲染 组件 引入 我们...

网友评论

      本文标题:vue.js入门(二,引入组件)

      本文链接:https://www.haomeiwen.com/subject/ycvbpctx.html