Vue自定义组件:

不论任何注册组件的方式:template属性有且仅有一个根节点标签

就是说模版属性的标签只能有一个在最外面

<div id="container-element">

  <mod-1></mod-1>

</div>

<script type="text/javascript">

  Vue.component("mod-1",{
template : "<h1>这是模版的标签</h1>"
}); let vueModel = new Vue({
el : "#container-element"
});
</script>

效果:

使用模版进行传值获取:

<div id="container-element">

  <mod-1 v-for="lang in items" v-bind:A="lang"></mod-1>

</div>

<script type="text/javascript">

  Vue.component("mod-1",{
props : ['A'],
template : "<h1>{{A}}</h1>"
}); let vueModel = new Vue({
el : "#container-element",
data : {
items : [
"java","c++","python","rust","linux"
]
}
});
</script>

效果:

这里值传递的很让人费解:

在模版组件这里的设置

然后是正常的vue指令编写,但是这个A注入就要注意一下

另一种注册组件的方式:

<template id="sample">
<h1>呵呵</h1>
</template>

像这样先使用模版声明好

    Vue.component("he-he", {
template : "#sample"
});

然后再声明组件,使用id选择绑定teamplate标签

私有组件和父子组件

使用Vue.component声明组件时,注册的是一个全局的组件,

允许在任意的一个Vue实例中使用该组件。

但是我们希望注册一个局部的私有组件,可将组件挂载到某个实例上面

私有组件:

    let privateComponent = Vue.extend({
template: "<h1>这是私有组件</h1>"
}); let vm = new Vue({
el : "#app",
components : {
"pc" : privateComponent
}
});

效果:

如果组件变量名称和components的属性名称一致可以不写k:v,直接写变量名称即可:

    let privateComponent = Vue.extend({
template: "<h1>这是私有组件</h1>"
}); let vm = new Vue({
el : "#app",
components : {
privateComponent
}
});

注意遵循驼峰命名:然后再使用组件时,命名以-分割,并且全小写:

<div id="app">
<private-component></private-component>
</div>

父组件 & 子组件

<div id="app">
<parent-com></parent-com> <!-- 最终渲染 -->
</div> <script type="text/javascript">
let childCom = Vue.extend({
template : `<h1>这是子组件!!!</h1>`
}); let parentCom = Vue.extend({
template :
`<div>
<h1>这是父组件!!!</h1>
<child-com></child-com>
</div>`,
components : { // 在父组件中声明子组件装载
childCom
}
}); let vm = new Vue({
el : "#app",
components : { // 在Vue实例中声明父组件装载
parentCom
}
})
</script>

效果:

组件的数据:

<div id="app">
<compo></compo>
</div> <script type="text/javascript">
let compo = Vue.extend({
template : `<h1>这是一个组件 {{msg}}</h1>`
}); let vm = new Vue({
el : "#app",
data : {
msg : "这是Vue实例的数据信息"
},
components : {
compo
}
});
</script>

可以看出来,我们的实例数据无法渲染在这个组件上面:

组件也可以具有data methods filter等等属性的对象,但是只有data的方式不一样

    let compo = Vue.extend({
template : `<h1>这是一个组件 {{msg}}</h1>`,
data (){
return {
msg : "这是子组件的消息msg"
}
}
});

然后页面的渲染恢复了正常:

为什么组件的数据data必须是一个方法的返回?

因为Vue会报错,其次每个组件都是一个独立的对象,如果不是独立将会导致数据公用问题:

就是一个组件被多个渲染,里面数据也将是共同使用,所以要以方法的形式返回

父子通信:


【Axios模拟后台传输的json数据】

{
"name" : "echo42",
"url" : "https://www.cnblogs.com/mindzone/p/13329771.html",
"page" : 10,
"gender" : true,
"address" : {
"country" : "中国",
"city" : "江西南昌",
"street" : "北京东路1688号"
}, "links" : [
{
"name" : "qqZone",
"url" : "https://user.qzone.qq.com/1791255334"
}, {
"name" : "acFun",
"url" : "https://www.acfun.cn/u/8680899"
}, {
"name" : "biliBili",
"url" : "https://space.bilibili.com/2931347"
}
]
}

页面:

<!DOCTYPE html>
<html lang="en"
xmlns:v-bind="http://www.w3.org/1999/xhtml"
xmlns:v-on="http://www.w3.org/1999/xhtml"
>
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
[v-clock] {
display: none;
}
</style>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js" ></script>
<script src="./../node_modules/_axios@0.19.2@axios/dist/axios.min.js"></script>
</head>
<body> <div id="container-element" v-clock> <!-- v-clock -->
<div></div> <a v-bind:href="info.url">绑定的个人地址</a> <!-- 利用v-bind完成对一些属性的赋值--> </div> <script type="text/javascript"> let vueModel = new Vue({
el : "#container-element", data(){
return{
info : {
name : null,
url : null,
page : null,
gender : null,
address : {
country : null,
city : null,
street : null
}, links : [
{name : null, url : null},
{name : null, url : null},
{name : null, url : null}
] } } }, mounted() {
axios.get('./json/data.json').then(response=>(this.info = response.data));
} });

【回顾JQuery的Ajax语法】

// 详细见W3CSchool https://www.w3school.com.cn/jquery/ajax_ajax.asp
$.ajax({
url : "${pageContext.request.contextPath}/xxx/xxx.action", // 请求发送地址
type : "post/get", // 请求方式/请求类型
dataType : "json", // 响应的数据格式
data : {
// 请求发送的数据
},
success : function (data) { // 后台有响应就会触发
// TODO ...
},
error : function () { // 一般请求异常会触发此回调函数
// TODO ...
},
async : true, // 是否异步请求:true / false 默认true
})

JQuery缩写版本:

$.get(
"urlAddress",
{
// data对象
},
function (responseData) {
// TODO 响应回调函数
}
);

$.post(
"urlAddress",
{
// data对象
},
function (responseData) {
// TODO 响应回调函数
}
);

【Axios语法】

// get请求
axios.get("requestUrlAddress?k1=v1&k2=v2&k3=v3&...").then(
function (response) {
// TODO 响应成功
},
function (err) {
// TODO 请求异常或者其他...
}
); // post请求
axios.post(
"requestUrlAddress",
{
// 参数对象
// K : V, ...
}
).then(
function (response) {
// TODO 响应成功
},
function (err) {
// TODO 请求异常或者其他...
}
);

axios要求post请求必须把参数统一在参数对象中声明【没试过地址传参,所以8知道】

原来axios是可以单独和原生JS或者JQuery结合使用,只是说配合Vue可以最佳实践吧

结合Vue也是一样的,在声明函数中声明axios发送异步请求

【笑话接口案例】

但是注意一点是Vue实例的data属性的数据会发生变化,需要在函数内作为变量接受一下再处理

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="./js/vue.min.js"></script>
<!--<script type="text/javascript" src="./js/axios.min.js"></script>-->
<script type="text/javascript" src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body> <div id="application">
<input type="button" value="点击或取随机笑话" @click="getJoke">
<p v-text="joke"></p>
</div> <script type="text/javascript">
let vueModel = new Vue({
el : "#application",
data : {
joke : "笑话案例"
},
methods : {
getJoke : function () {
let that = this; // 注意要在这里声明变量接受
axios.get("https://autumnfish.cn/api/joke").then(
function (response) {
console.log(response);
that.joke = response.data;
},
function (err) {
alert(err);
}
);
}
}
});
</script> </body>
</html>

【属性计算】

<!DOCTYPE html>
<html lang="en"
xmlns:v-bind="http://www.w3.org/1999/xhtml"
xmlns:v-on="http://www.w3.org/1999/xhtml"
>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./../node_modules/_axios@0.19.2@axios/dist/axios.min.js"></script>
</head>
<body> <div id="container-element" v-clock> <!-- v-clock --> <p>currentTimeInMethods : {{currentTimeInMethods()}}</p>
<p>currentTimeInComputed : {{currentTimeInComputed}}</p> </div> <script type="text/javascript">
let vueModel = new Vue({
el : "#container-element", data : {
message : "Hello,Echo42!!!"
}, methods : {
currentTimeInMethods : function () {
return Date.now();
}
},
computed : {
currentTimeInComputed : function () {
this.message;
return Date.now();
}
}
});
</script> </body>
</html>

【Vue】02 Component 组件 & Axios的更多相关文章

  1. Vue.js——component(组件)

    概念: 组件(Component)是自定义元素. 作用: 可以扩展HTML元素,封装可重用的代码. <div id="myView"> <!-- 把学生的数据循环 ...

  2. 怎样在 Vue 的 component 组件中使用 props ?

    1. 在注册一个组件时, 添加一个 props 属性, 将需要添加的 props 作为数组的元素进行添加, 比如下面的例子中, 我们添加了一个变量 name , 他就是一个 props, 我们可以通过 ...

  3. vue 组件开发、vue自动化工具、axios使用与router的使用(3)

    一. 组件化开发 1.1 组件[component] 在网页中实现一个功能,需要使用html定义功能的内容结构,使用css声明功能的外观样式,还要使用js定义功能的特效,因此就产生了一个功能先关的代码 ...

  4. day 84 Vue学习六之axios、vuex、脚手架中组件传值

    Vue学习六之axios.vuex.脚手架中组件传值   本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...

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

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

  6. Vue.js之组件(component)

    从结构上看,组件之于实例,就好比轮子之于汽车.从属性和方法来看,组件有实例的大部分方法,如果Vue实例是孙悟空,组件就好比实例的一个毫毛,变化多端却为Vue实例所用. 目录: 组件的注册 is的作用 ...

  7. 关于Vue的component制作dialog组件

    其实原理很简单,兴个粟子, 点击按钮出现 dialog 弹出杠, 将dialog做成一个组件,components/dialog.vue 就是在components里面新建一个vue.将这个vue做为 ...

  8. 手把手教你实现一个 Vue 进度条组件!

    最近在个人的项目中,想对页面之间跳转的过程进行优化,想到了很多文档或 npm 等都用到的页面跳转进度条,于是便想自己去实现一个,特此记录. 来看下 npm 搜索组件时候的效果: so 下面咱们一起动手 ...

  9. Vue 入门之组件化开发

    Vue 入门之组件化开发 组件其实就是一个拥有样式.动画.js 逻辑.HTML 结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue 的组件和也做的非常 ...

  10. vue自定义全局组件(自定义插件)

    有时候我们在做开发的时候,就想自己写一个插件然后就可以使用自己的插件,那种成就感很强.博主最近研究element-ui和axios的时候,发现他们是自定义组件,但是唯一有一点不同的是,在用elemen ...

随机推荐

  1. SELinux 基本原理

    首发公号:Rand_cs SELinux 基本原理 本文讲述 SELinux 保护安全的基本原理 安全检查顺序 不废话,直接先来看张图 当我们执行系统调用的时候,会首先对某些错误情况进行检查,如果失败 ...

  2. Keil一键添加.c文件和头文件路径脚本--可遍历添加整个文件夹

    最近想移植个LVGL玩玩,发现文件实在是太多了,加的手疼都没搞完,实在不想搞了就去找脚本和工具,基本没找到一个...... 主要是自己也懒得去研究写脚本,偶然搜到了一个博主写的脚本,原博客地址:htt ...

  3. OpenWrt安装配置Tailscale

    什么是tailscale? Tailscale就是基于Wireguard的一个联网工具,无需公网地址,通过去中心化,实现各个节点之间点对点的连接.配置简单友好,支持的各类平台和客户端. 相比较其他组网 ...

  4. MYSQL-check管理

    mysql这个东西对于管理员并不友好,看起来还没有成品.就拿亲儿子workbeanch来说吧,功能也不是很齐全,速度也一般般,否则sqlyog之类的早没有什么活路了. 社区版的支持非常薄弱(商业版不太 ...

  5. Windows无法调节亮度

    原因1:驱动问题 解决方式: 安装360驱动大师,一键安装. 也可以使用其他软件:如驱动精灵. 推荐使用电脑品牌本身的驱动软件:如联想:联想驱动管理 原因2:设备管理问题 解决方式: 计算机 -> ...

  6. 上交大开源镜像站下架 Docker Hub 镜像

    ​ 在现代软件开发中,Docker镜像已经成为不可或缺的工具.然而,最近频频出现的Docker镜像下架事件让许多开发者措手不及.突然失去依赖的镜像,不仅打乱了项目进程,还引发了许多不便.那么,面对Do ...

  7. [AGC030C] Coloring Torus

    非常巧妙的一道构造题,发现对于所构造的 \(n\) 有上限,那么对于 \(K<=500\) 的情况,很好构造,每行全是一个数就行了,对于 \(K>500\) 的情况,显然每行都是 \(1, ...

  8. VS图片

  9. Java开发框架演变过程

    JavaWeb开发简史 Java框架创始人 Java框架说明 Spring: 把应用程序中的bean统一交给Spring进行管理控制,简化了我们的代码操作,和降低了代码的耦合度,Spring框架基本上 ...

  10. Spring5.X bean自动装配Autowire属性

    属性注入 set方法.构造函数.POJO.list.map.ref,属于手工注入,点我直达 Spring自动注入 使用<bean>元素的autowire属性为一个bean定义指定自动装配模 ...