# 组件之间通信 可以通过 v-model 子组件可以通过 改变数据来改变父组件的数组
 * v-model  子组件需要接受value属性,需要出发this.$emit("input","data");
    v-model="posStart" === @input="input" :value="posStart" //"input" 底层自己实现 不用写
 * sync 同步子组件与父组件的值 子组件需要接受 value1 的值,需要this.$emit("update:value1","data")
  :value1.sync = "posStart" === @update:value1 ="input" :value1="posStart" //===后面的父组件需要写input函数 带sync不用写
 * 传统的props $emit
# 父组件调用子组件的函数 
 * 如果是某一个特定的组件 在父组件调用子组件的地方加上ref,用this.$refs.refName.fn();
 * 如果是需要调用所有子组件的方法,可以在父组件中使用$children,调用子组件的方法

1.父组件App

  1. <template>
  2. <div id="app">
  3. <!--
  4. <ScrollBall @input="input" :value="posStart" color="green" :target="posTarget"></ScrollBall>-->
  5. <!-- v-model 底层 实现@input="input" :value="posStart" 父组件中不需要写 input函数 v-model底层会自己写赋值-->
  6. <ScrollBall v-model="posStart" color="yellow" :target="posTarget"></ScrollBall>
  7. <ScrollBall ref="ball2" :value.sync="posStart" color="red" :target="posTarget"></ScrollBall>
  8. <!--
  9. <ScrollBall @update:value1 ="input" :value1="posStart" color="red" :target="posTarget"></ScrollBall>
  10. -->
  11. <button @click="stopHandle"> stop </button>
  12. </div>
  13. </template>
  14.  
  15. <script>
  16. import ScrollBall from "./components/ScrollBall.vue";
  17. export default {
  18. name: "app",
  19. beforeUpdate() {
  20. // console.log(this.posStart);
  21. },
  22. data() {
  23. return {
  24. posStart: 160,
  25. posTarget: 400
  26. };
  27. },
  28. components: {
  29. ScrollBall
  30. },
  31. methods: {
  32. stopHandle(){
  33. this.$children.forEach(ele=>{
  34. ele.stop();
  35. });
  36. console.log(this.$children);
  37. // this.$refs.ball2.stop();
  38. }
  39. /* input(value) {
  40. this.posStart = value;
  41. }*/
  42. }
  43. };
  44. </script>
  45.  
  46. <style lang="less">
  47. </style>

2.子组件

  1. <template>
  2. <div class="ball" :style="style" :id="ballId"></div>
  3. </template>
  4.  
  5. <script>
  6. export default {
  7. name: "ScrollBall",
  8. mounted(){
  9. let ball = document.getElementById(this.ballId);
  10. //页面加载后让小球运动
  11. let fn = () => {
  12. let left = this.value;
  13. // console.log("left:",left);
  14. if(left >= this.target){
  15. return cancelAnimationFrame(this.timer);
  16. }
  17. // left += 5;
  18. this.$emit("input",left+1); //交给父亲去改
  19. this.$emit("update:value",left+1);
  20. ball.style.transform = `translate(${left}px)`;
  21. this.timer = requestAnimationFrame(fn);
  22. }
  23. this.timer = requestAnimationFrame(fn); //此函数只执行一次
  24. },
  25. props: {
  26. color: {
  27. type: String,
  28. default:"white"
  29. },
  30. value:{
  31. type:Number,
  32. default:0
  33. },
  34. target:{
  35. type:Number,
  36. default:0
  37. }
  38. },
  39. computed: {
  40. style(){
  41. return {background:this.color}
  42. },
  43. ballId(){
  44. return "ball"+this._uid;
  45. }
  46. },
  47. methods:{
  48. stop(){
  49. cancelAnimationFrame(this.timer);
  50. }
  51. }
  52. };
  53. </script>
  54. <style lang="less">
  55. .ball {
  56. width: 100px;
  57. height: 100px;
  58. border: 1px solid #000;
  59. border-radius: 50%;
  60. box-sizing: border-box;
  61. }
  62. </style>

涉及的知识点:

vue-cli生成的目录结构
vue create name
    node_modules 第三方包存储目录s
    public 静态资源 已被托管
    src 源代码
        -assets 资源目路 存放静态资源
        -components 存储其他组件的目录
        -App.vue 根组件
        -main.js 入口文件
    .gitignore git 忽略文件
    
.vue单文件组件
    template 组件的模板
    注意 只有一个根节点
script 组件的js 配置组件选项
style scoped 作用域 我的样式只用于当前的组件,不加就是全局的样式
vue组件开发基本使用
scrollball
# 不用创建项目 vue 应用 # npm install -g @vue/cli-service-global 
## 完了之后用vue serve
# 创建项目 vue create vue-apply
# 父组件传递背景颜色给子组件 :子组件接受颜色后,需要动态绑定 :style={background:color}  可以用计算属性 :style='stlyleComputed'
# 父组件传值的时候带上:是本身变量,不带是字符串
# 子组件修改父组件的值$emit ,父组件绑定事件用@
# 可以用requestAnmiationFrame来代替setTimeout
# 尽量通过修改父组件的数据,来跟新子组件

vue 父子组件 基础应用scrollball v-model sync的更多相关文章

  1. vue父子组件传值加例子

    例子:http://element-cn.eleme.io/#/zh-CN/component/form         上进行改的 父传子:用prop:子组件能够改变父组件的值,是共享的,和父操作是 ...

  2. 关于Vue父子组件传值(复杂数据类型的值)的细节点

    vue 父子组件传值是很常见的,多数情况下都是父传递给子的值是基础数据类型,如string,number,boolean, 当父组件值被修改时,子组件能够实时的作出改变. 如果父子传值的类型是复杂数据 ...

  3. vue父子组件状态同步的最佳方式续章(v-model篇)

    大家好!我是木瓜太香!一名前端工程师,之前写过一篇<vue父子组件状态同步的最佳方式>,这篇文章描述了大多数情况下的父子组件同步的最佳方式,也是被开源中国官方推荐了,在这里表示感谢! 这次 ...

  4. vue父子组件之间传值

    vue父子组件进行传值 vue中的父子组件,什么是父组件什么是子组件呢?就跟html标签一样,谁包裹着谁谁就是父组件,被包裹的元素就是子组件. 父组件向子组件传值 下面用的script引入的方式,那种 ...

  5. vue父子组件的传值总结

    久违的博客园我又回来了.此篇文章写得是vue父子组件的传值,虽然网上已经有很多了.写此文章的目的就是记录下个人学习的一部分.接下来我们就进入主题吧! 在开发vue项目中,父子组件的传值是避免不掉的. ...

  6. 【转】vue父子组件之间的通信

    vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不同情况下又各有不同.最常见的就是父组件为控制组件子组件为视图组件.父组件传递数据给子组件使 ...

  7. Vue父子组件生命周期

    转载自:https://blog.csdn.net/a8725585/article/details/79092505 vue父子组件钩子函数触发顺序 beforeMount后mounted前构造子组 ...

  8. vue 父子组件通信详解

    这是一篇详细讲解vue父子组件之间通信的文章,初始学习vue的时候,总是搞不清楚几个情况 通过props在父子组件传值时,v-bind:data="data",props接收的到底 ...

  9. Vue父子组件数据双向绑定,子组件可修改props

    第一种,子组件通过监听父组件数据,子组件改变数据之后通知给父组件 原文链接:https://blog.csdn.net/m0_37728716/article/details/81776929 父组件 ...

随机推荐

  1. SAGE|DNA微阵列|RNA-seq|lncRNA|scripture|tophat|cufflinks|NONCODE|MA|LOWESS|qualitile归一化|permutation test|SAM|FDR|The Bonferroni|Tukey's|BH|FWER|Holm's step-down|q-value|

    生物信息学-基因表达分析 为了丰富中心法则,研究人员使用不断更新的技术研究lncRNA的方方面面,其中技术主要是生物学上的微阵列芯片技术和表达数据分析方法,方方面面是指lncRNA的位置特征. Bac ...

  2. RPC 框架性能大比拼

    Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. Motan 是新浪微博开源的一个Java ...

  3. haproxy笔记之六:负载均衡MySQL服务的配置示例

    #--------------------------------------------------------------------- # Global settings #---------- ...

  4. webdriver访问各个浏览器驱动下载及安装

    这里首先需要查看一下自己安装的selenium版本 查看步骤: windows系统打开cmd命令行输入:pip show selenium查看结果如下: 进入到selenium官网查看版本信息 sel ...

  5. 【转载】Scrapy安装及demo测试笔记

    Scrapy安装及demo测试笔记 原创 2016年09月01日 16:34:00 标签: scrapy / python   Scrapy安装及demo测试笔记 一.环境搭建 1. 安装scrapy ...

  6. The Monster(Codeforce-C-思维题)

    C. The Monster time limit per test 1 second memory limit per test 256 megabytes   As Will is stuck i ...

  7. Python---5Python内置的有序集合-list和tuple

    list Python内置的一种数据类型是列表:list,[ ].可以修改的集合. list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: ...

  8. 在 Ubuntu 14.04 安装 PyCharm 5 & Oracle JDK

    由于授权问题,在较新的Linux发行版本中都不再包含Oracle Java,取而代之的是OpenJDK.Ubuntu也是如此. OpenJDK能满足大部分的应用程序运行条件,但PyCharm无法在Op ...

  9. e代驾推出新产品“e代喝”,能否实现前者的社交梦?

    近日,关于e代驾推出e代喝的新闻不断出现在各大媒体的新闻报道之中,看似好像是替人排扰解难的征服酒局的又一利器.但事实真的如此吗?首先要弄清楚的,是目前e代驾在行业中的处境.作为代驾行业的先驱者,e代驾 ...

  10. 一文看懂Java序列化

    一文看懂Java序列化 简介 Java实现 Serializable 最基本情况 类的成员为引用 同一对象多次序列化 子父类引用序列化 可自定义的可序列化 Externalizable:强制自定义序列 ...