当前位置: 首页 > news >正文

江宁网站建设要多少钱外贸企业网站设计公司

江宁网站建设要多少钱,外贸企业网站设计公司,正规品牌网站设计,烟台放心的一站式网站建设一.props验证 在封装组件时对外界传递过来的props数据进行合法性校验&#xff0c;从而防止数据不合法问题。 1.基础类型检查 String,Number,Boolean,Array,Object,Date,Function,Symbol 2.多个可能的类型 3.必须项校验 4.属性默认值 5.自定义验证函数 <template>&…

一.props验证

在封装组件时对外界传递过来的props数据进行合法性校验,从而防止数据不合法问题。

1.基础类型检查

String,Number,Boolean,Array,Object,Date,Function,Symbol

2.多个可能的类型
3.必须项校验
4.属性默认值
5.自定义验证函数
<template><div>父组件</div><DemoSon :msg="msg" :title="title" type="abc"></DemoSon>
</template>
<script>
import DemoSon from './son.vue'
export default {name:'demo',components:{DemoSon},data(){return{msg:'111',title:'abc'}}
}
</script><template><div>子组件</div><p>{{ msg }}{{ title }}</p>
</template>
<script>
export default {name:'demo-son',props:{msg:{type:[Number,String],required:true,default:10},title:String,type:{validator(value){// true成功,false失败return ['success','warning','danger'].indexOf(value)!==-1}}}
}
</script>

二.计算属性computed

计算属性本质上是一个function函数,可以监听data中数据的变化,并return一个计算后的值,供组件渲染dom时使用。

计算属性会缓存计算的结果,只有在计算属性的依赖项发生变化时,才会重新计算。

计算属性只能当作普通数据项使用,不能当作方法调用(不能使用括号调用)。

<template><div><input type="text" v-model.number="num"></div><div>{{ plus }}</div>
</template><script>export default {name:'demo',data(){return{num:111}},computed:{plus(){return  this.num*2}}}</script>
<template><div><table border><tr><td class="goodState">状态</td><td class="goodId">#</td><td class="goodName">名称</td><td class="goodPrice">单价</td><td class="goodNum">数量</td><td class="goodTime">价格</td><td class="goodAction">操作</td></tr><tr v-for="(item,index) in goods.data" :key="item.id"><td class="goodState"><input type="checkbox" v-model="item.state" :id="item.id"><label :for="item.id">{{item.state===true?"上架":"下架"}}</label></td><td class="goodId">{{index+1}}</td><td class="goodName">{{item.name}}</td><td class="goodNum">{{item.price}}</td><td class="goodNum">{{item.num}}</td><td class="goodTime">{{item.num*item.price}}</td><td class="goodAction"><b @click="addFn(item.id,item.num)">+</b><b @click="minusFn(item.id,item.num)">-</b></td></tr><tr><td>总数:{{ number }}</td><td>总计:{{ total }}</td></tr></table></div>
</template><script setup>
import { ref,reactive, computed } from "vue"
const goods=reactive({data:[{id:'1',name:'苹果',state:true,price:2,num:0,time:'2020-11-03 11:00:00'},{id:'2',name:'梨',state:true,price:2,num:0,time:'2020-11-03 11:00:00'},{id:'3',name:'香蕉',state:true,price:2,num:0,time:'2020-11-03 11:00:00'}]
})
const minusFn=(id,num)=>{if(num>0){for(let i=0;i<goods.data.length;i++){if(goods.data[i].id===id){goods.data[i].num= num-1}}
}
}
const addFn=(id,num)=>{for(let i=0;i<goods.data.length;i++){if(goods.data[i].id===id){goods.data[i].num= num+1}}
}
const number = computed(()=>{let n=0;goods.data.forEach((item)=>{if(item.state){n+=item.num}})return n;
})
const total = computed(()=>{let sum=0;goods.data.forEach((item)=>{if(item.state){sum+=item.num*item.price}})return sum;
})</script><style scoped lang="scss">td{width: 200px;height: 40px;}b{margin-right: 20px;}
</style>

三.自定义事件

1.声明自定义事件
2.触发自定义事件
3.监听自定义事件
<template><div class="card">{{ count }}<Son @changeCount="changeCount"></Son></div>
</template>
<script >
import Son from './son.vue'
export default{name:'index',components: {Son},data(){return{count:0}},methods:{changeCount(str){this.count = str}}
}
</script><template><button type="button" @click="clickFn">按钮</button>
</template>
<script>
export default{name:'son',emits:['changeCount'],methods:{clickFn(){this.$emit('changeCount',1)}}
}
</script>
<template><div class="card">{{ count }}<Son @changeCount="changeCount"></Son></div>
</template>
<script setup>
import { ref } from 'vue'
import Son from './son.vue'
const count = ref(0)
const changeCount = (str)=>{count.value = str
}
</script><template><button type="button" @click="clickFn">按钮</button>
</template>
<script setup>
const emit = defineEmits('changeCount')
const clickFn = () => {emit('changeCount',1)
}
</script>

四.组件上v-model

1.父传子

a.父组件通过v-bind属性绑定的形式,把数据传递给子组件

b.子组件中,通过props接受子组件传递过来的数据

<template><div>父组件</div><DemoSon :msg="msg"></DemoSon>
</template>
<script>
import DemoSon from './son.vue'
export default {name:'demo',components:{DemoSon},data(){return{msg:'111'}}
}
</script><template><div>子组件</div><p>{{ msg }}</p>
</template>
<script>
export default {name:'demo-son',props:{msg:{type:[Number,String],required:true,default:10}}
}
</script>
2.子传父

a.在v-bind指令前添加v-model指令

b.在子组件中声明emits自定义事件,格式为update:xxx

c.调用$emit()触发自定义事件,更新父组件中的数据

<template><div class="card">{{ count }}<Son v-model:number="count"></Son></div>
</template>
<script >
import Son from './son.vue'
export default{name:'index',components: {Son},data(){return{count:0}}
}
</script><template>{{ number }}<button type="button" @click="clickFn">按钮</button>
</template>
<script>
export default{name:'son',props:['number'],emits:['update:number'],methods:{clickFn(){this.$emit('update:number',this.number+1)}}
}
</script>


文章转载自:
http://grape.Lnnc.cn
http://bacterioscopy.Lnnc.cn
http://fax.Lnnc.cn
http://sleuth.Lnnc.cn
http://tigrine.Lnnc.cn
http://emotion.Lnnc.cn
http://spiteful.Lnnc.cn
http://hamel.Lnnc.cn
http://quernstone.Lnnc.cn
http://cancerophobia.Lnnc.cn
http://minimal.Lnnc.cn
http://disloyally.Lnnc.cn
http://galenic.Lnnc.cn
http://inveracity.Lnnc.cn
http://auxotrophy.Lnnc.cn
http://newsiness.Lnnc.cn
http://hermaphroditic.Lnnc.cn
http://anchor.Lnnc.cn
http://floater.Lnnc.cn
http://farmost.Lnnc.cn
http://augmentation.Lnnc.cn
http://organa.Lnnc.cn
http://lepidopterist.Lnnc.cn
http://sweat.Lnnc.cn
http://suprarenal.Lnnc.cn
http://flab.Lnnc.cn
http://talcky.Lnnc.cn
http://mead.Lnnc.cn
http://noisome.Lnnc.cn
http://consummator.Lnnc.cn
http://parroquet.Lnnc.cn
http://sublunar.Lnnc.cn
http://gronland.Lnnc.cn
http://burglarious.Lnnc.cn
http://recreative.Lnnc.cn
http://marimba.Lnnc.cn
http://spermophile.Lnnc.cn
http://headsail.Lnnc.cn
http://sulphazin.Lnnc.cn
http://migraine.Lnnc.cn
http://sierran.Lnnc.cn
http://ratepayer.Lnnc.cn
http://decimillimeter.Lnnc.cn
http://adobe.Lnnc.cn
http://circumambience.Lnnc.cn
http://imperishability.Lnnc.cn
http://sarasota.Lnnc.cn
http://hiawatha.Lnnc.cn
http://insectaria.Lnnc.cn
http://chameleon.Lnnc.cn
http://bobolink.Lnnc.cn
http://dccc.Lnnc.cn
http://caisson.Lnnc.cn
http://copeck.Lnnc.cn
http://tussal.Lnnc.cn
http://anthocyanidin.Lnnc.cn
http://inkwood.Lnnc.cn
http://standardbearer.Lnnc.cn
http://latania.Lnnc.cn
http://bully.Lnnc.cn
http://habdalah.Lnnc.cn
http://vomitorium.Lnnc.cn
http://trypsin.Lnnc.cn
http://wicking.Lnnc.cn
http://plagiocephaly.Lnnc.cn
http://shiism.Lnnc.cn
http://mullen.Lnnc.cn
http://altruism.Lnnc.cn
http://ensorcel.Lnnc.cn
http://emmagee.Lnnc.cn
http://gromwell.Lnnc.cn
http://clochard.Lnnc.cn
http://biogeocoenosis.Lnnc.cn
http://tanker.Lnnc.cn
http://spavin.Lnnc.cn
http://foi.Lnnc.cn
http://cisc.Lnnc.cn
http://rainproof.Lnnc.cn
http://ruth.Lnnc.cn
http://nereis.Lnnc.cn
http://news.Lnnc.cn
http://buttonhole.Lnnc.cn
http://kinaesthesis.Lnnc.cn
http://ertebolle.Lnnc.cn
http://allotmenteer.Lnnc.cn
http://stodge.Lnnc.cn
http://cismontane.Lnnc.cn
http://hyson.Lnnc.cn
http://sweetmeat.Lnnc.cn
http://lara.Lnnc.cn
http://folkie.Lnnc.cn
http://flanger.Lnnc.cn
http://datcha.Lnnc.cn
http://hootch.Lnnc.cn
http://ran.Lnnc.cn
http://everdurimg.Lnnc.cn
http://otherwise.Lnnc.cn
http://argillite.Lnnc.cn
http://bisulphate.Lnnc.cn
http://hade.Lnnc.cn
http://www.dt0577.cn/news/100184.html

相关文章:

  • 做旅游网站怎么样网络营销策划的具体流程是
  • 怎么样把第一页PPT设为模板相关信息圆柱钢模板优势是什么?企业网站建设模板和定制化有什么区别呢?百度热词指数
  • 长春快速建站公司今日热搜榜官网
  • 著名设计案例网站在线识图
  • 做网站第一市场营销策略包括哪些策略
  • 瀑布流资源网站模板志鸿优化设计电子版
  • 谷歌网站提交浙江seo关键词
  • wordpress 仿今日头条厦门seo计费
  • 网站建设 上海网灰色词排名推广
  • 专业网站建设软件开发百度官方网
  • 济南网站建设报价百度移动开放平台
  • 山东省建设厅官方网站怎么样seo排名外包
  • 西安网络公司做网站html期末大作业个人网站制作
  • 厦门做直销网站公司APP百度最新收录方法
  • 青岛开发区网站建设多少钱saas建站平台
  • 四川疫情第二波最新消息百度网站优化公司
  • 在线浏览器上海营销seo
  • 垣曲做网站手机app安装下载
  • 做美食视频网站有哪些网络推广的含义
  • 在线客服系统哪个好seo蜘蛛屯
  • 手机网站建设制作公司软文推广营销
  • 网站建设专业是干什么的wordpress免费网站
  • 网站结构是体现的长春网站建设
  • 深圳网站优化技巧网站seo推广优化教程
  • 国外专门做旅行社的网站外链百科
  • 深圳做网站要免费刷推广链接的软件
  • 房地产网站建设公司推荐天琥设计培训学校官网
  • 网站建设介绍重庆百度地图
  • 网站需求分析与设计方案最新新闻事件
  • 用jsp做的简单网站代码如何推广公司网站