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

Vue 脚手架基础特性

一、ref属性

        1.被用来给元素或子组件注册引用信息(id的替代者)

        2.应用在html标签上获取的是真实DOM元素,用在组件标签上是组件实例对象

        3.使用方式:

                (1).打标识:<h1 ref="xxx">...</h1> 或 <School ref="xxx" />

                (2).获取:this.$refs.xxx

<template><div><h2 v-text="msg" ref="text"></h2><button @click="showDOM" ref="btn">点击获取DOM元素</button><School ref="sch"/></div>
</template><script>import School from './Components/School'export default {name:'App',components:{School},data() {return {msg:'欢迎学习CLI!!!'}},methods: {showDOM(){console.log(this.$refs.text) //真实DOM元素console.log(this.$refs.btn) //真实DOM元素console.log(this.$refs.sch) //School组件的实例对象}},}
</script>

二、props配置

        功能:让组件接收外部传过来的数据

                (1).传递数据:

                        <Demo name="xxx">

                (2).接收数据:

                        第一种方式(只接收):

                                props:['name']

                        第二种方式(限制类型):

                                props:{

                                        name:String

                                }

                        第三种方式(限制类型、限制必要性、指定默认值):

                                props:{

                                        name:{

                                                type:String, //类型

                                                required:true, //必要性

                                                default:'张三' //默认值

                                        }

                                }

        备注:props是只读的,Vue底层会监测你对props的修改,就会发出警告,若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。

        School.vue:

<template><div class="school"><h2>{{ msg }}</h2><h2>{{ name }}</h2><h2>{{ myAge+1 }}</h2><h2>{{ sex }}</h2><button @click="updateAge">点击修改年龄</button></div>
</template><script>export default {name:'Student',data() {return {msg:'欢迎学习CLI!!!',myAge:this.age}},methods: {updateAge(){this.myAge++}},// 简单声明接收props:['name','age','sex']//接收的同时对数据进行类型限制// props:{//     name:String,//     sex:String,//     age:Number// }//接收的同时对数据进行类型限制+默认值的指定+必要性的限制// props:{//     name:{//         type:String,//         required:true//     },//     age:{//         type:Number,//         default:18//     },//     sex:{//         type:String,//         required:true//     }// }}
</script>

         App.vue:

<template><div><Student name="张三" :age="18" sex="男"/></div>
</template><script>import Student from './Components/Student'export default {name:'App',components:{Student},}
</script>

三、mixin配置

        1.功能:可以把多个组件共用的配置提取成一个混入对象

        2.使用方式:

                (1).定义混合:

                        {

                                data(){...},

                                methods:{...},

                                ...

                        }

                (2).使用混合:

                        (1.全局混入:Vue.mixin(xxx)

                        (2.局部混入:mixins:['xxx']

/* 定义mixin.js */
export const mixin = {methods: {showName(){alert(this.name)}},mounted() {console.log('你好啊!')},
}export const mixin2 = {data() {return {x:100,y:200}},
}  
/* 全局混入 */
//全局混入会在所有的Vue节点上混入
import Vue from "vue";
import App from "./App"
import {mixin,mixin2} from './mixin'Vue.mixin(mixin)
Vue.mixin(mixin2)Vue.config.productionTip = falsenew Vue({el:'#App',render: h => h(App)
})
/* 局部混入 */
<template><div><h2 @click="showName()">{{ name }}</h2><h2>{{ sex }}</h2></div>
</template><script>import {mixin,mixin2} from '../mixin'export default {name:'Student',data() {return {name:'张三',sex:'男',x:666 //若组件中已有定义变量,则优先使用组件中定义的变量}},//若组件中已经定义相同生命周期钩子,则使用两遍对应的生命周期钩子mounted(){alert('你好啊!') },mixins:[mixin,mixin2]}
</script>

四、插件

        1.功能:用于增强Vue

        2.本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的参数。

        3.定义插件:

                对象.install = function (Vue,options) {

                        Vue.filter(......) //添加全局过滤器

                        Vue.directive(......) //添加全局指令

                        Vue.mixin(......) //配置全局混入

                        //添加实例方法

                        Vue.prototype.$myMethod = function () {......}

                        Vue.prototype.$myProperty= xxx

                }

        4.使用插件:Vue.use()

/* 定义plugins插件 */
export default {install(Vue){console.log("@@install",Vue)//过滤器Vue.filter('mySlice',function(value) {return value.slice(0,2)})//自定义指令Vue.directive('fbind',{bind(element,binding){element.value = binding.value},inserted(element,binding){element.focus()},updat(element,binding) {element.value = binding.value},})//mixinVue.mixin({data() {return {x:100}},})//在Vue原型上添加一个方法Vue.prototype.hello = () => (alert('你好呀!'))},
}
/* 在main.js中使用插件 */
import Vue from "vue";
import App from "./App"
import plugins from "./plugins";Vue.config.productionTip = falseVue.use(plugins)new Vue({el:'#App',render: h => h(App)
})
/* School.vue */
<template><div><h2>{{ name | mySlice }}</h2><h2>{{ address }}</h2><button @click="test">点击我</button></div>
</template><script>export default {name:'School',data() {return {name:'清华大学',address:'北京'}},methods:{test(){this.hello()}}}
</script>/* Student.vue */
<template><div><h2>{{ name }}</h2><h2>{{ sex }}</h2><input type="text" v-fbind:value="name"></div>
</template><script>export default {name:'Student',data() {return {name:'张三',sex:'男',}},}
</script>

五、scoped样式

        1.作用:让样式在局部生效,防止冲突。

        2.写法:<style scoped>

        当两个组件的css样式名相同时,后导入的组件会覆盖掉先导入组件中相同样式名的样式,style中引入scoped样式即可分割作用域。

/* School.vue */
<template><div class="demo"><h2>{{ name | mySlice }}</h2><h2>{{ address }}</h2></div>
</template><script>export default {name:'School',data() {return {name:'清华大学',address:'北京'}},}
</script><style scoped>.demo{background-color: orange;}
</style>/* Student */
<template><div class="demo"><h2 class="font-color">{{ name }}</h2><h2>{{ sex }}</h2></div>
</template><script>export default {name:'Student',data() {return {name:'张三',sex:'男',}},}
</script><style lang="less" scoped>.demo{background-color: skyblue;.font-color{color: orange;}}
</style>
http://www.lryc.cn/news/596157.html

相关文章:

  • js 数字逢三切断、整数最大9位、小数最大2位
  • SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:权限管理(三)
  • ucharts 搭配uniapp 自定义x轴文字 实现截取显示
  • redis秒杀之lua脚本
  • 企业微信快捷回复设定方法(提高效率)
  • 如何永久删除安卓设备中的照片(已验证)
  • 大型语言模型(Large Language Models,LLM)
  • REASONING ELICITATION IN LANGUAGE MODELSVIA COUNTERFACTUAL FEEDBACK
  • AWS OpenSearch 搜索排序常见用法
  • 如何加固Endpoint Central服务器的安全?(上)
  • 【运维】SGLang服务器参数配置详解
  • Python趣味算法:折半查找(二分查找)算法终极指南——原理、实现与优化
  • SQL Server 查询优化
  • 电子电气架构 --- 从软件质量看组织转型路径
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 访问鉴权功能实现
  • 5G 智慧矿山监控终端
  • UE5 UI 控件切换器
  • 记录解决问题--使用maven help插件一次性上传所有依赖到离线环境,spring-boot-starter-undertow离线环境缺少依赖
  • Jenkins 多架构并发构建实战
  • gitlab私服搭建
  • wed前端简单解析
  • k8s:离线部署tomcatV11.0.9,报Cannot find /opt/bitnami/tomcat/bin/setclasspath.sh
  • 中国在远程医疗智能化方面有哪些特色发展模式?
  • 公交车客流人数统计管理解决方案:智能化技术与高效运营实践
  • DAY20 奇异值SVD分解
  • 【bug】Yolo11在使用tensorrt推理numpy报错
  • 【数据可视化-70】奶茶店销量数据可视化:打造炫酷黑金风格的可视化大屏
  • 使用qt编写上位机程序,出现串口死掉无法接受数据的bug
  • vue2 webpack 部署二级目录、根目录nginx配置及打包配置调整
  • 【深度解析】从AWS re_Invent 2025看云原生技术发展趋势