博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue学习:props,scope,slot,ref,is,slot,sync等知识点
阅读量:5098 次
发布时间:2019-06-13

本文共 1883 字,大约阅读时间需要 6 分钟。

1、ref :为子组件指定一个索引 ID,给元素或者组件注册引用信息。refs是一个对象,包含所有的ref组件。

<div id="parent">

  <user-profile ref="profile"></user-profile>(子组件)
</div>

var parent = new Vue({ el: '#parent' })

// 访问子组件
var child = parent.$refs.profile

ps:$表示refs为vue对象,而不是普通的js对象。

2、props:父组件向子组件传值(数据),驼峰式改为横线式。

Vue.component(
'child', {
// 声明 props
props: [
'message'],
// 就像 data 一样,prop 可以用在模板内
// 同样也可以在 vm 实例中像“this.message”这样使用
template: 
'<span>{
{ message }}</span>'
})

3、scope 作用域

在父级中,具有特殊属性 scope 的 <template> 元素必须存在,表示它是作用域插槽的模板。scope 的值对应一个临时变量名,此变量接收从子组件中传递的 props 对象:

<div class="parent">
<child>
<template scope="props">
<span>hello from parent</span>
<span>{
{ props.text }}</span>
</template>
</child>
</div>
 
4、is 用于动态组件并且给予DOM内模板到限制来工作
 
动态组件:
由于table、ul、ol等标签内无法插入自定义标签,只能插入特定标签,所以使用is属性带入。通过使用保留的 
<component> 元素,动态地绑定到它的 
is 特性,我们让多个组件可以使用同一个挂载点,并动态切换:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var 
vm = 
new 
Vue({
  
el: 
'#example'
,
  
data: {
    
currentView: 
'home'
  
},
  
components: {
    
home: { 
/* ... */ 
},
    
posts: { 
/* ... */ 
},
    
archive: { 
/* ... */ 
}
  
}
})
<component v-bind:is=
"currentView"
>
  
<!-- 组件在 vm.currentview 变化时改变! -->
</component>

 my-row是自定义组件

1
2
3
<table>
  
<tr is=
"my-row"
></tr>
</table>

 

 5.slot分发内容
不具名slot用来备用插入,子组件只有不具名的slot时候,父组件才回调用slot内容,如果子组件有其他内容,父组件的内容会替换掉slot内容,slot内容不显示。
1
2
3
4
5
6
<div>
  
<h2>我是子组件的标题</h2>
  
<slot>
    
只有在没有要分发的内容时才会显示。
  
</slot>
</div>

  

1
2
3
4
5
6
7
8
父组件模版:
<div>
  
<h1>我是父组件的标题</h1>
  
<my-component>
    
<p>这是一些初始内容</p>
    
<p>这是更多的初始内容</p>
  
</my-component>
</div>

  

1
2
3
4
5
6
7
8
9
渲染结果:
<div>
  
<h1>我是父组件的标题</h1>
  
<div>
    
<h2>我是子组件的标题</h2>
    
<p>这是一些初始内容</p>
    
<p>这是更多的初始内容</p>
  
</div>
</div>

  

 

6、sync 字符修饰符
当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定的值。
是一个会被扩展为一个自动更新父组件属性的 v-on 侦听器。
<comp :foo.sync="bar"></comp>会被拓展为:
<comp :foo="bar" @update:foo="val => bar = val"></comp>
当子组件需要更新 
foo 的值时,它需要显式地触发一个更新事件:
this.$emit('update:foo', newValue)

转载于:https://www.cnblogs.com/navysummer/p/8991541.html

你可能感兴趣的文章
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
MySQL更改默认的数据文档存储目录
查看>>
替代微软IIS强大的HTTP网站服务器工具
查看>>
6.5 案例21:将本地数据库中数据提交到服务器端
查看>>
PyQt5--EventSender
查看>>
android 通过AlarmManager实现守护进程
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
win7下把电脑设置成wlan热
查看>>
Java 多态 虚方法
查看>>
jquery.validate插件在booststarp中的运用
查看>>
java常用的包
查看>>
PHP批量覆盖文件并执行cmd命令脚本
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
支持向量机——内核
查看>>
MFC注册热键
查看>>
万能的SQLHelper帮助类
查看>>
如何在 Terminal 内可以“用惯用的编辑器”快速打开“目前正在做”的专案(project)呢?...
查看>>
uboot分析:uboot的启动过程分析
查看>>
tmux的简单快捷键
查看>>
springboot笔记04——读取配置文件+使用slf4j日志
查看>>