vue 父子组件 基础应用scrollball v-model sync
1.父组件App
<template>
<div id="app">
<!--
<ScrollBall @input="input" :value="posStart" color="green" :target="posTarget"></ScrollBall>-->
<!-- v-model 底层 实现@input="input" :value="posStart" 父组件中不需要写 input函数 v-model底层会自己写赋值-->
<ScrollBall v-model="posStart" color="yellow" :target="posTarget"></ScrollBall>
<ScrollBall ref="ball2" :value.sync="posStart" color="red" :target="posTarget"></ScrollBall>
<!--
<ScrollBall @update:value1 ="input" :value1="posStart" color="red" :target="posTarget"></ScrollBall>
-->
<button @click="stopHandle"> stop </button>
</div>
</template> <script>
import ScrollBall from "./components/ScrollBall.vue";
export default {
name: "app",
beforeUpdate() {
// console.log(this.posStart);
},
data() {
return {
posStart: 160,
posTarget: 400
};
},
components: {
ScrollBall
},
methods: {
stopHandle(){
this.$children.forEach(ele=>{
ele.stop();
});
console.log(this.$children);
// this.$refs.ball2.stop();
}
/* input(value) {
this.posStart = value;
}*/
}
};
</script> <style lang="less">
</style>
2.子组件
<template>
<div class="ball" :style="style" :id="ballId"></div>
</template> <script>
export default {
name: "ScrollBall",
mounted(){
let ball = document.getElementById(this.ballId);
//页面加载后让小球运动
let fn = () => {
let left = this.value;
// console.log("left:",left);
if(left >= this.target){
return cancelAnimationFrame(this.timer);
}
// left += 5;
this.$emit("input",left+1); //交给父亲去改
this.$emit("update:value",left+1);
ball.style.transform = `translate(${left}px)`;
this.timer = requestAnimationFrame(fn);
}
this.timer = requestAnimationFrame(fn); //此函数只执行一次
},
props: {
color: {
type: String,
default:"white"
},
value:{
type:Number,
default:0
},
target:{
type:Number,
default:0
}
},
computed: {
style(){
return {background:this.color}
},
ballId(){
return "ball"+this._uid;
}
},
methods:{
stop(){
cancelAnimationFrame(this.timer);
}
}
};
</script>
<style lang="less">
.ball {
width: 100px;
height: 100px;
border: 1px solid #000;
border-radius: 50%;
box-sizing: border-box;
}
</style>
涉及的知识点:
vue 父子组件 基础应用scrollball v-model sync的更多相关文章
- vue父子组件传值加例子
例子:http://element-cn.eleme.io/#/zh-CN/component/form 上进行改的 父传子:用prop:子组件能够改变父组件的值,是共享的,和父操作是 ...
- 关于Vue父子组件传值(复杂数据类型的值)的细节点
vue 父子组件传值是很常见的,多数情况下都是父传递给子的值是基础数据类型,如string,number,boolean, 当父组件值被修改时,子组件能够实时的作出改变. 如果父子传值的类型是复杂数据 ...
- vue父子组件状态同步的最佳方式续章(v-model篇)
大家好!我是木瓜太香!一名前端工程师,之前写过一篇<vue父子组件状态同步的最佳方式>,这篇文章描述了大多数情况下的父子组件同步的最佳方式,也是被开源中国官方推荐了,在这里表示感谢! 这次 ...
- vue父子组件之间传值
vue父子组件进行传值 vue中的父子组件,什么是父组件什么是子组件呢?就跟html标签一样,谁包裹着谁谁就是父组件,被包裹的元素就是子组件. 父组件向子组件传值 下面用的script引入的方式,那种 ...
- vue父子组件的传值总结
久违的博客园我又回来了.此篇文章写得是vue父子组件的传值,虽然网上已经有很多了.写此文章的目的就是记录下个人学习的一部分.接下来我们就进入主题吧! 在开发vue项目中,父子组件的传值是避免不掉的. ...
- 【转】vue父子组件之间的通信
vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不同情况下又各有不同.最常见的就是父组件为控制组件子组件为视图组件.父组件传递数据给子组件使 ...
- Vue父子组件生命周期
转载自:https://blog.csdn.net/a8725585/article/details/79092505 vue父子组件钩子函数触发顺序 beforeMount后mounted前构造子组 ...
- vue 父子组件通信详解
这是一篇详细讲解vue父子组件之间通信的文章,初始学习vue的时候,总是搞不清楚几个情况 通过props在父子组件传值时,v-bind:data="data",props接收的到底 ...
- Vue父子组件数据双向绑定,子组件可修改props
第一种,子组件通过监听父组件数据,子组件改变数据之后通知给父组件 原文链接:https://blog.csdn.net/m0_37728716/article/details/81776929 父组件 ...
随机推荐
- 【Linux_Shell 脚本编程学习笔记三、分支与循环结构】
if 语句是实际生产工作中最重要且最常用的语句,所以,必须掌握牢固 if 条件语法 1. 单分支机构 if [ 条件 ] then 指令 fi 或 if [ 条件 ]; then 指令 fi ...
- 2015-09-15-git配置
https://help.github.com/articles/set-up-git/ git上传是忽略一些文件 在每个git的项目中有一个.gitignore文件,将忽略的文件或文件夹输入即可. ...
- [LC] 268. Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- NDK开发之<cpu-features.h模块功能>
今天研究下cpufeatures库,它是一个轻量级的展示CPU特性的模块,调用者在运行时候可以根据这个库提供的简单接口获取到目标机的CPU架构和特性. 一.代码路径: $NDK_ROOT/source ...
- TOMCAT7不兼容spring boot 2.0
找不到这个类,找不到那个类... Spring Boot 2.0 (and Spring Framework 5 upon which it builds) requires a Servlet 3. ...
- Hibernate之cascade属性和inverse属性
1.cascade属性 cascade属性的作用是描述关联对象进行操作时的级联特性,只有涉及关系的元素才有cascade属性.具有cascade属性的标记包括<many-to-one/>. ...
- 如何快速找出Linux中的重复文件
md5sum | sort | uniq -w32 --all-repeated=separate [1]find -not -empty -type f -printf “%s\n” :find是查 ...
- Appium移动自动化测试实例-基于python
一.环境搭建 安装Android 环境变量.SDK.Android API.ADT等. 步骤1 安装SDK:下载地址为https://pan.baidu.com/s/1mi6PT9m.如提示错误:' ...
- Google在百慕大避税几十亿美金,为什么巨头和富豪都会选百慕大避税?
为什么"越有钱越有钱"?为什么富豪只要不自己"作",就能让自己的财富疯狂增加?除了经营意识之外,关键他们还可以利用自己的资源.实力等去做很多看似让人不齿,但其实 ...
- C++走向远洋——54(项目一2、分数类的重载、取倒数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...