vue & child component & props

vue pass data to child component

https://vuejs.org/v2/guide/components.html

https://vuejs.org/v2/guide/components.html#Passing-Data-to-Child-Components-with-Props



https://stackoverflow.com/questions/39199303/pass-data-from-parent-to-child-component-in-vue-js



vue components

how to write an vue component



vue register component single file

https://vuejs.org/v2/guide/components-registration.html

https://vuejs.org/v2/guide/components.html

https://vuejs.org/v2/guide/single-file-components.html



https://stackoverflow.com/questions/44568323/vue-js-loading-single-file-components

https://stackoverflow.com/questions/43622907/how-do-i-register-a-vue-component


TODO list

  1. pass event to CropCard Components

  2. export components, publish to npm

???


vue card components demo


<template>
<div class="crop-card-container">
<div
v-if="isShowHotFire"
class="crop-card-fire">
<span class="crop-card-text"></span>
</div>
<div class="crop-card-logo">
<img
:src="logo"
alt=""
class="crop-card-logo-img"
/>
</div>
<div class="crop-card-right">
<span class="crop-card-right-title">
<span class="crop-card-right-title-key">
{{cropName}}
</span>
<span class="crop-card-right-title-value">
{{cropNameOther}}
</span>
<!-- <span class="crop-card-right-title-key">钉钉</span>
<span class="crop-card-right-title-value">(中国) 信息技术有限公司</span> -->
</span>
<p class="crop-card-right-content">
<span class="crop-card-right-content-key">法定代表人</span>
<span class="crop-card-right-content-key">注册资本</span>
</p>
<p class="crop-card-right-content">
<span class="crop-card-right-content-value">
{{cropOwner}}
</span>
<span class="crop-card-right-content-value">
{{cropMoney}}
</span>
<!-- <span class="crop-card-right-content-value">马云</span>
<span class="crop-card-right-content-value">330886万美元</span> -->
</p>
</div>
<div class="crop-card-line"></div>
<div class="crop-card-footer">
<span class="crop-card-footer-key">品牌</span>
<span class="crop-card-footer-value">
{{cropName}}
</span>
<!-- <span class="crop-card-footer-value">钉钉</span> -->
</div>
</div>
</template> <script>
// "use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
*
* @description 模块-CropCard
* @augments
* @example
* @link
* @created 2019-05-22
*
*/ // import Light from "light";
import defaultImage from "../../images/search-history/dd-logo.png";
export default {
props: [
"cropName",
"cropNameOther",
"cropOwner",
"cropMoney",
],
name: "CropCard",
data() {
return {
value: "",
logo: defaultImage,
isShowHotFire: true,
};
},
methods: {
AutoSkipToSearchPage() {
let url = window.location.origin;
let hash = `search`;
Light.navigate(
`${url}/#/${hash}`,
{
// message: "",
},
{
title: "",// 公司 / 资讯 / 链谱 / 人物 / 数据
replace: false,
},
);
},
},
mounted() {
// props ???
console.log(`mounted `, this.props);
// undefined
},
created() {
console.log(`created `, this.props);
// undefined
console.log(this.cropName);
console.log(this.cropOwner);
console.log(this.cropMoney);
// OK
},
}; /* import * as CropCard from "./components/corp-card";
export default {
name: "search",
components:{
CropCard,
},
}, */
</script> <style lang="css">
html{
--color: #f0f;
font-family:PingFangSC-Regular;
font-weight:400;
}
.crop-card-container{
position: relative;
display: flex;
flex-flow: row wrap;
justify-content: flex-start;
align-items: stretch;
align-content: stretch;
box-sizing: border-box;
margin: 0;
padding: 0;
width: calc(100vw);
height: calc(2.9rem);
border-bottom: 0.2rem solid rgba(249,248,253,1);
}
.crop-card-logo{
order: 0;
flex: 0 1 auto;
margin: 0.32rem;
margin-right: 0.2rem;
height: 1.9rem;
height: calc(1.9rem - 0.64rem);
}
.crop-card-logo-img{
width: 0.64rem;
height: 0.64rem;
}
.crop-card-right{
order: 1;
flex: 0 1 auto;
line-height: 0.28rem;
height: 0.28rem;
font-size: 0.34rem;
width: 6.34rem;
height: calc(1.9rem - 0.42rem);
margin-top: 0.42rem;
}
.crop-card-right-title{
width: 6.34rem;
}
.crop-card-right-title-key{
color:rgba(25,31,37,1);
font-weight: 600;
}
.crop-card-right-title-value{
color:rgba(25,31,37, 0.5);
}
.crop-card-right-content{
line-height: 0.40rem;
height: 0.40rem;
font-size: 0.28rem;
width: 6.34rem;
margin-top: 0.1rem;
margin-bottom: 0.1rem;
}
.crop-card-right-content-key{
color:rgba(25,31,37,0.4);
width: 2.86rem;
min-width: 2.86rem;
display: inline-block;
}
.crop-card-right-content-value{
color:rgba(25,31,37,1);
width: 2.86rem;
min-width: 2.86rem;
display: inline-block;
font-weight: 600;
}
.crop-card-line {
order: 3;
flex: 0 1 auto;
width: 7.5rem;
height: 2px;
background:rgba(25,31,37,0.08);
margin: 0;
padding: 0;
}
.crop-card-footer{
order: 4;
flex: 0 1 auto;
height: 0.8rem;
}
.crop-card-footer-key{
font-size: 0.24rem;
line-height: 0.34rem;
height: 0.34rem;
width: 0.76rem;
min-width: 0.76rem;
color:rgba(25,31,37,0.4);
display: inline-block;
margin: 0.24rem 0 0.22rem 0.32rem;
}
.crop-card-footer-value{
font-size: 0.24rem;
line-height: 0.34rem;
height: 0.34rem;
min-width: 0.5rem;
font-weight: 600;
color:rgba(25,31,37,1);
}
.crop-card-fire{
position: absolute;
top: 0;
right: 0;
width: 0;
height: 0;
border-width: 0.32rem;
border-style: solid;
border-color: rgba(255,148,62,1) rgba(255,148,62,1) transparent transparent;
cursor: pointer;
}
.crop-card-text{
display: inline-block;
transform: translateX(0.03rem) translateY(-0.25rem);
}
.crop-card-text::after{
content: "";
display: block;
color: #fff;
background: transparent;
} </style>


<template>
<div
v-if="isShowCropCard"
@click="AutoSkipToPage(`enterprise/special-topics`)"
class="crop-card-container">
<div
v-if="cropShowHotFire"
class="crop-card-fire">
<span class="crop-card-text"></span>
</div>
<div class="crop-card-logo">
<img
:src="cropLogo"
alt=""
class="crop-card-logo-img"
/>
</div>
<div class="crop-card-right">
<span class="crop-card-right-title">
<span class="crop-card-right-title-key">
{{cropName}}
</span>
<span class="crop-card-right-title-value">
{{cropNameOther}}
</span>
</span>
<p class="crop-card-right-content">
<span class="crop-card-right-content-key">法定代表人</span>
<span class="crop-card-right-content-key">注册资本</span>
</p>
<p class="crop-card-right-content">
<span class="crop-card-right-content-value">
{{cropOwner}}
</span>
<span class="crop-card-right-content-value">
{{cropMoney}}
</span>
</p>
</div>
<div class="crop-card-line"></div>
<div class="crop-card-footer">
<span class="crop-card-footer-key">品牌</span>
<span class="crop-card-footer-value">
{{cropName}}
</span>
</div>
</div>
</template> <script>
// "use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
*
* @description 模块-CropCard
* @augments
* @example
* @link
* @created 2019-05-22
*
*/ // import Light from "light";
import defaultImage from "../../images/search-history/default.png";
export default {
props: [
"cropObj",
],
name: "CropCard",
data() {
return {
isShowCropCard: true,
cropId: "",
cropName: "",
cropNameOther: "",
cropOwner: "",
cropMoney: "",
cropLogo: defaultImage,
cropShowHotFire: false,
};
},
methods: {
AutoSkipToPage(hash =``) {
let url = window.location.origin;
let id = this.cropId;
if (!hash) {
hash = `search`;
}
Light.navigate(
`${url}/#/${hash}`,
{
id,
},
{
title: "",
replace: false,
},
);
},
},
mounted() {
// props
},
created() {
try {
if (this.cropObj) {
let {
cropId,
cropName,
cropNameOther,
cropOwner,
cropMoney,
cropLogo,
cropShowHotFire,
} = this.cropObj;
this.cropId = cropId ? cropId : "";
this.cropName = cropName ? cropName : "";
this.cropNameOther = cropNameOther ? cropNameOther : "";
this.cropOwner = cropOwner ? cropOwner : "";
this.cropMoney = cropMoney ? cropMoney : "";
this.cropLogo = cropLogo ? cropLogo : defaultImage;
this.cropShowHotFire = cropShowHotFire ? cropShowHotFire : false;
this.isShowCropCard = true;
} else {
this.isShowCropCard = false;
throw new Error(`CropCard 的 cropObj 属性不可为空!`);
}
} catch (err) {
console.error(`CropCard 使用错误: \n`, err);
}
},
};
</script> <style lang="css">
html{
--highlight-color:rgba(255, 148, 62, 1);
font-family:PingFangSC-Regular;
font-weight:400;
}
.crop-card-container{
position: relative;
display: flex;
flex-flow: row wrap;
justify-content: flex-start;
align-items: stretch;
align-content: stretch;
box-sizing: border-box;
margin: 0;
padding: 0;
width: calc(100vw);
height: calc(2.9rem);
border-bottom: 0.2rem solid rgba(249,248,253,1);
}
.crop-card-logo{
order: 0;
flex: 0 1 auto;
margin: 0.32rem;
margin-right: 0.2rem;
height: 1.9rem;
height: calc(1.9rem - 0.64rem);
}
.crop-card-logo-img{
width: 0.64rem;
height: 0.64rem;
}
.crop-card-right{
order: 1;
flex: 0 1 auto;
line-height: 0.28rem;
height: 0.28rem;
font-size: 0.34rem;
width: 6.34rem;
height: calc(1.9rem - 0.42rem);
margin-top: 0.42rem;
}
.crop-card-right-title{
width: 6.34rem;
}
.crop-card-right-title-key{
color:var(--highlight-color);
/* color:rgba(25,31,37,1); */
font-weight: 600;
}
.crop-card-right-title-value{
color:rgba(25,31,37, 0.5);
}
.crop-card-right-content{
line-height: 0.40rem;
height: 0.40rem;
font-size: 0.28rem;
width: 6.34rem;
margin-top: 0.1rem;
margin-bottom: 0.1rem;
}
.crop-card-right-content-key{
color:rgba(25,31,37,0.4);
width: 2.86rem;
min-width: 2.86rem;
display: inline-block;
}
.crop-card-right-content-value{
color:rgba(25,31,37,1);
width: 2.86rem;
min-width: 2.86rem;
display: inline-block;
font-weight: 600;
}
.crop-card-line {
order: 3;
flex: 0 1 auto;
width: 7.5rem;
height: 2px;
background:rgba(25,31,37,0.08);
margin: 0;
padding: 0;
}
.crop-card-footer{
order: 4;
flex: 0 1 auto;
height: 0.8rem;
}
.crop-card-footer-key{
font-size: 0.24rem;
line-height: 0.34rem;
height: 0.34rem;
width: 0.76rem;
min-width: 0.76rem;
color:rgba(25,31,37,0.4);
display: inline-block;
margin: 0.24rem 0 0.22rem 0.32rem;
}
.crop-card-footer-value{
font-size: 0.24rem;
line-height: 0.34rem;
height: 0.34rem;
min-width: 0.5rem;
font-weight: 600;
color:rgba(25,31,37,1);
}
.crop-card-fire{
position: absolute;
top: 0;
right: 0;
width: 0;
height: 0;
border-width: 0.32rem;
border-style: solid;
border-color: rgba(255,148,62,1) rgba(255,148,62,1) transparent transparent;
cursor: pointer;
}
.crop-card-text{
display: inline-block;
transform: translateX(0.03rem) translateY(-0.25rem);
}
.crop-card-text::after{
content: "";
display: block;
color: #fff;
background: transparent;
} </style>

vue & child component & props的更多相关文章

  1. [Vue] Parent and Child component communcation

    By building components, you can extend basic HTML elements and reuse encapsulated code. Most options ...

  2. 二、Vue组件(component):组件的相互引用、通过props实现父子组件互传值

    一.组件各部分说明及互相引用 1.一个vue组件由三个部分组成 Template 只能存在一个根元素 2.Script 3.Style scoped:样式只在当前组件内生效 1.1 组件的基本引用代码 ...

  3. Vue组件选项props

    前面的话 组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props ...

  4. vue学习:props,scope,slot,ref,is,slot,sync等知识点

    1.ref :为子组件指定一个索引 ID,给元素或者组件注册引用信息.refs是一个对象,包含所有的ref组件. <div id="parent"> <user- ...

  5. 【转存】Vue组件选项props

    原帖地址 前面的话 组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过  ...

  6. vue之component

    因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data.computed.watch.methods 以及生命周期钩子等.仅有的例外是像 el 这样根实例特有的选 ...

  7. vue框架中props的typescript用法

    vue框架中props的typescript用法 在vue中使用typescript时,需要引入vue-property-decorator库来兼容格式. javascript写法 Vue.compo ...

  8. [Angular 2] @ViewChild to access Child component's method

    When you want to access child component's method, you can use @ViewChild in the parent: Parent Compo ...

  9. 前端性能优化成神之路--vue组件懒加载(Vue Lazy Component )

    ---恢复内容开始--- 使用组件懒加载的原因 我们先来看看这样的一个页面,页面由大量模块组成,所有模块是同时进行加载,模块中图片内容较多,每个模块的依赖资源较多(包括js文件.接口文件.css文件等 ...

随机推荐

  1. 陈思淼:阿里6个月重写Lazada,再造“淘宝”的技术总结

    小结: 1. 所谓的中台技术,就是从 IDC,网络,机房,操作系统,中间件,数据库,算法平台,数据平台,计算平台,到业务平台,每一层都有清晰的定义和技术产品. 具体来看,首先,集团技术的分层和每层的产 ...

  2. OpenSSL 常见对称加密算法特性分析

    在选择加密算法,面对一大长串的选项时,大家都有这样的疑问,究竟哪种加密方式是最好的呢? 对于加密方式.算法来说,一般安全性与性能呈负相关,越是安全的,对性能要求则更高. 现在主流的加密协议的安全性均能 ...

  3. celery 原理

    https://mp.weixin.qq.com/s/FzvZHQpF5mhV9t_HBzlcwg Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处 ...

  4. 从tcp层面研究java socket 的使用

    本文主要通过wireshark抓包来分析java socket程序的一些细节, 解决以前的一些疑问: 1.当一方的socket先关闭后,另一方尚未关闭的socket 还能做什么? 2.当基于socke ...

  5. 在Ubuntu安装Docker

    1.查看Linux内核依赖 kernel version >= 3.8 查看代码: uname -a | awk '{split($3, arr, "-"); print a ...

  6. NodeJS入门学习教程

    一.概念 1.什么是nodejs Node.js是JavaScript 运行时环境,通俗易懂的讲,Node.js是JavaScript的运行平台 Node.js既不是语言,也不是框架,它是一个平台 2 ...

  7. Javascript 基础知识整理

    Javascript的作用 表单验证,减轻服务器压力 添加页面动画效果 动态更改页面内容 Ajax网络请求(异步加载数据) -它属于前端的核心,主要用来控制和重新调整DOM,通过修改DOM结构,从而达 ...

  8. js部分知识整理,google浏览器的代码调试

    整理一些学过的js知识点,包括js中3个括号的含义,this的使用,递归,google浏览器的代码调试.Location的属性及常用方法,window对象常用方法,open方法等. js括号 在js中 ...

  9. Spring Cloud与Eureka

    Spring Cloud与Eureka 一.使用SpringCloud注册中心Eureka 1.1 Eureka和Zookeeper对比 1.1.1 Zookeeper保证CP 1.1.2 Eurek ...

  10. K8s client 使用

    使用的k8s client包: <dependency> <groupId>io.fabric8</groupId> <artifactId>kuber ...