学习Vue基本使用方法和组件

news/2025/6/4 6:25:35

学习Vue基本使用方法和组件

  • 一、基本使用方法
    • 1、常用
  • 二、组件
    • 1、全局组件
    • 2、局部组件
    • 3、特殊元素特殊对待
  • 三、其他


一、基本使用方法

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script></head><body><!-- 数据的绑定 --><div id="t1">{{t1_data}}</div><!-- v-bind:不仅可以绑定hidden属性,disabled属性,style属性, color属性,凡是标签有的属性,都可以通过这个方法进行绑定 --><div id="t2" v-bind:hidden="t2_hidden">{{t2_data}}</div><!-- :hidden和v-bind:hidden="my_hidden"完全等价的一种写法 --><div id="t3" :hidden="t3_hidden">{{t3_data}}</div><!-- 事件绑定 --><!-- 这里的click可以换成任意一个html事件,比如load , doubleclick , mouseon , mousedown这些,不过click肯定是我们最常用的 --><button id="t4" v-on:click="t4Dj">{{t4_data}}</button><!-- 事件绑定 --><!-- v-on:语法同样有一个缩写@,比如v-on:click="clickButton"就等价于@click="clickButton" --><button id="t5" @click="t5Dj">{{t5_data}}</button><!-- v-model语法糖实现了vue数据的反向传输 --><div id="t6"><input type="text" v-model="t6_data" /><p> {{t6_data}}</p></div><!-- v-model.number后面的这个.number的意思是说在返回my_step值的时候自动转换成integer类型,因为默认是string类型。 --><div id="t7"><input type="number" v-model.number="oldNum" /><button @click="add">Add</button><p> {{newNun}}</p></div>
</body>
<script src="./demo1.js"></script></html>

var t1Vue = new Vue({el: "#t1",data: {t1_data: "t1_test"}
})var t2Vue = new Vue({el: "#t2",data: {t2_data: "t2_test",t2_hidden: "hidden"}
})var t3Vue = new Vue({el: "#t3",data: {t3_data: "t3_test",t3_hidden: "hidden"}
})var t4Vue = new Vue({el: "#t4",data: {t4_data: "点我一下"},methods: {t4Dj: function () {this.t4_data = "点我干啥"}}
})var t5Vue = new Vue({el: "#t5",data: {t5_data: "点我一下"},methods: {t5Dj: function () {this.t5_data = "点我干啥"}}
})var t6Vue = new Vue({el: "#t6",data: {t6_data: "测试同步文字"}
})var t7Vue = new Vue({el: "#t7",data: {oldNum: 0,newNun: 0},methods: {add: function () {this.newNun = this.newNun + this.oldNum;}}});

DOM1(input标签)——>VUE——>DOM2(p标签)

先从用户输入的DOM1获取输入保存在VUE实例,用从VUE实例里拿到数据输出到DOM2

运行这个页面,发现

标签中的内容会随着标签实时的变化,说明我们利用v-model语法变相实现了数据的双向传递

1、常用

  • 用 new Vue({})新建vue实例
  • 使用 v-bind:和{{}}双大括号语法在html中绑定变量
  • 使用 v-on: 和 @ 语法绑定函数到标签的事件
  • 使用 v-model: 语法使用户的页面输入反向传递回vue实例变量

二、组件

1、全局组件

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script></head><body><div id="app"><my-counter></my-counter></div><button-casdounter></button-casdounter>
</body><script src="./demo.js"></script></html>

定义组件数据(一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝)

//定义一个全局组件
Vue.component('my-counter', {//定义组件数据(一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝)data: function () {return {count: 0,}},//定义组件方法methods: {clickAdd: function () {this.count++;}},template: '<button button @click="clickAdd" > 点击我后数值增加 {{count}}(全局组件) </button > ',})var app = new Vue({el: "#app",
})

在这里插入图片描述

上面我们注册的是全局组件,也就是在整个VUE根实例中注册的,也可以理解为调用了VUE的静态方法注册的,这样注册的组件是可以在任何VUE实例中使用的。

2、局部组件

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
</head><body><div id="app"><component-a></component-a></div><div id="app2"><sb></sb></div>
</body>
<script src="./demo2.js"></script></html>
//局部组件一
var componentA = {template: '<div><p>这里是局部组件</p><componentB></componentB></div>',//使用components在父组件中注册局部组件components: {'componentB': {template: '<button>这是一个局部组件</button>'},}
}//局部组件二
//定义componentC组件变量
var componentC = {template: '<button>这是组件C</button>'
}//定义componentD组间变量
var componentD = {template: '<div>这是组件D<component-c></component-c></div>',//自定义名字components: {'component-c': componentC}
}var app = new Vue({el: "#app",components: {'componentA': componentA}
})var app2 = new Vue({el: "#app2",//自定义名字components: {'sb': componentD}
})

对于 components 对象中的每个 property 来说,其 property 名就是自定义元素的名字,其 property 值就是这个组件的选项对象。

在这里插入图片描述
上面的代码将每个组件的代码赋值给了不同的变量,这样如果某个组件有变化,只用修改相应的变量,而不需要修改所有引用此变量的方法,实现了松耦合的编程思想。

3、特殊元素特殊对待

有些 HTML 元素,诸如 <ul>、<ol>、<table> 和 <select>,对于哪些元素可以出现在其内部是有严格限制的。而有些元素,诸如 <li>、<tr> 和 <option>,只能出现在其它某些特定的元素内部。

这会导致我们使用这些有约束条件的元素时遇到一些问题。例如:

<table><blog-post-row></blog-post-row><!--table元素中只允许包含<th>,<tr>等元素-->
</table>

这个自定义组件 <blog-post-row> 会被作为无效的内容提升到外部,并导致最终渲染结果出错。幸好这个特殊的 is 特性给了我们一个变通的办法:

<table><tr is="blog-post-row"></tr>
</table>

这样这个自定义组件就会正常渲染。

如果你使用单文件组件的话(就是.vue后缀的文件),这一条可以忽略

三、其他

VUE是允许用大写字母来注册组件的,但当你使用组件时得在驼峰命名的大写字母间加上”-“并都改为小写,比如myComponent在使用时要换成<my-component></my-component>

Vue.component('todo-item', {// todo-item 组件现在接受一个"prop",类似于一个自定义 attribute。// 这个 prop 名为 todo。props: ['todo'],template: '<li>{{ todo.text }}</li>'
})

接着,我们可以使用 v-bind 指令将待办项传到循环输出的每个组件中,即使用v-bind 来动态传递 prop:

<div id="app-7"><ol><!--现在我们为每个 todo-item 提供 todo 对象,todo 对象是变量,即其内容可以是动态的。我们也需要为每个组件提供一个“key”,vue会尽可能的复用之前已经存在的元素,给元素一个唯一的 key,该元素将不会被复用,表示该元素是独立的。--><todo-itemv-for="item in groceryList"   <!-- 循环 -->v-bind:todo="item"            <!-- 动态传递 prop => ['todo'] -->v-bind:key="item.id"          <!-- id 独立元素标识 -->></todo-item></ol>
</div>

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_46146718/article/details/124752948
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-18152.html

相关文章

bootstrap datepicker Uncaught TypeError: Cannot call method 'split' of undefined问题

这个问题主要是由于date对象不是字符串&#xff0c;不能使用 split 函数&#xff0c;简单处理一下&#xff0c;转换成字符串就可以解决问题&#xff1a; parseDate: function(date, format) { var parts date.split(format.separator), < 出错的地方 改成&#xff1a; par…

IndexOf的用法(查找一个字符出现的次数以及索引)

1 string msg "大刀对单刀&#xff0c;单刀对大刀&#xff0c;大刀斗单刀&#xff0c;单刀夺大刀。";2 //判断这个字符串中大刀出现的次数&#xff0c;和每次出现的索引位置3 int count 0;4 string keywords "大刀"…

Impala提高性能的优化方法

SQL优化&#xff0c;使用之前调用执行计划 1&#xff0c;执行SQL前对SQL进行一个分析&#xff0c;使用explain sql&#xff08;分析哪个步骤需要内存多&#xff0c;指定机器&#xff09;&#xff0c;profile&#xff08;为什么这次的SQL执行的这么慢&#xff09; 2&#xff0c…

Nodejs使用webpack或vue-cli搭建vue项目

Nodejs搭建vue项目一、下载后基本配置1、安装cnpm以及全局二、webpack工程三、vue-cli工程四、解读1、项目根目录中的文件2、public文件夹3、src文件夹五、总结六、遇到问题1、安装vue出现报错2、项目实操一、下载后基本配置 1、安装cnpm以及全局 在 nodejs 安装目录下&#…

信息不是信息系统

信息不是信息系统 ,信息&#xff0b;信息处理工具使用人信息系统不需要信息的业务活动要信息干什么&#xff0c;信息只对需要他的人有用。信息系统的最终对接对象是人脑这个生物智能信息系统&#xff0c;才能发挥他的价值 宁无信息&#xff0c;勿假信息。 现在的信息技术的价值…

Vue 项目初始化

Vue 项目初始化一、初始化1、删除 Helloword.vue2、删除 views 中的文件3、自定义页面4、清空默认根组件、项目样式二、其他1、设置行尾序列一、初始化 1、删除 Helloword.vue 删除 src文件夹下的 cpmponents文件夹下的 Helloword.vue 文件 2、删除 views 中的文件 删除 v…

Hbase Shell命令大全

hbase shell - get,scan,过滤器等使用https://blog.csdn.net/qq_41712271/article/details/108465612 —般操作 1 查看命令行的具体使用 help help scan 2 查看操作表的命令 table_help 3 查询服务器状态 可以为 ‘summary’, ‘simple’, ‘detailed’, or ‘replication’…

第二周会议:任务分配与时间规划

系统架构&#xff1a;MVC 开发模式&#xff1a;敏捷开发 时间规划&#xff1a; l 第3周(9.30~10.6)&#xff1a;逻辑层、底层迅速走读所有代码&#xff0c;熟悉整体架构&#xff0c;江林楠、洪宇、王需三人平时需要密切沟通&#xff0c;尽快开会给表现层做大致介绍。底层&…

Vue 项目前端响应式布局及框架搭建

Vue 项目前端响应式布局及框架搭建一、flexible 插件1、引用 flexible 插件2、修改 flexible 默认配置3、展示效果二、cssrem 插件 (px -> rem)三、项目搭建1、设置背景图2、设置标题文字四、图表环境搭建1、Echarts 全局引用2、Axios 全局引用一、flexible 插件 项目是需要…

Android service——Android service全面总结

一、服务的基本知识&#xff1a; 一个Serviceandroid 系统中的四大组件之一&#xff08;Activity、Service、BroadcastReceiver、ContentProvider&#xff09;,也是一种应用程序组件&#xff0c;它跟Activity的级别差不多&#xff0c;但不能自己运行只能后台运行&#xff0c;并…