vue快速入门(四十四)自定义组件

ops/2024/9/24 17:13:06/

注释很详细,直接上代码

上一篇

新增内容

  1. 全局注册自定义组件并应用
  2. 局部注册自定义组件并应用

此篇使用了axios模块没有安装导入的先看这一篇

axios模块下载与导入

源码

main.js

import Vue from 'vue'
import App from './App.vue'//全局引入axios
// 引入axios
import axios from 'axios';
// 挂载到vue原型链上
Vue.prototype.axios = axios;Vue.config.productionTip = false//全局注册指令(自动获取焦点)
Vue.directive('focus', {// ele:绑定的元素(操作节点)// obj:指令的绑定对象(获取属性)bind(ele,obj){//只执行一次;DOM渲染之前执行,可以进行样式操作},inserted(ele,obj){//只执行一次,DOM渲染之后执行,可以进行行为操作ele.focus()// 聚焦元素console.log(obj)},update(ele,obj){//数据更新后执行},componentUpdated(ele,obj){//父子组件都更新后执行},unbind(ele,obj){//只执行一次,指令与元素解绑时执行}
})new Vue({render: h => h(App),
}).$mount('#app')

App.vue

<template><div id="app"><!-- 当然我们也可以写成v-focus="xxx"进行传值,值可以在对象属性中获取 --><input type="text" v-focus><TestComponent/></div>
</template>
<script>javascript">
import TestComponent from "./components/TestComponent.vue";
export default {name: "App",components: {TestComponent},data() {return {};},methods: {}
};
</script>
<style></style>

TestComponent.vue

<template><div class="main"><div class="box"><ul v-loading="list.length"><li v-for="item in list" :key="item.id" class="news"><div class="left"><div class="title">{{ item.title }}</div><div class="info"><span>{{ item.source }}</span><span>{{ item.time }}</span></div></div><div class="right"><img :src="item.img" alt="" /></div></li></ul></div></div>
</template><script>javascript">//局部引入axios
//  import axios from 'axios'export default {data() {return {list: [],};},async created() {// 1. 发送请求获取数据const res = await this.axios.get("http://hmajax.itheima.net/api/news");setTimeout(() => {// 2. 更新到 list 中,用于页面渲染 v-forthis.list = res.data.data;}, 1000);},// 自定义指令directives: {loading: {inserted(ele, obj) {//刷新后立即判断//如果数据长度不为零则表示加载完毕,可以去除loading的类名obj.value <= 0? ele.classList.add("loading"): ele.classList.remove("loading");},update(ele, obj) {//数据改变后判断obj.value <= 0? ele.classList.add("loading"): ele.classList.remove("loading");},},},
};
</script><style>
/* 使用伪类覆盖的方法 */
.loading:before {content: "";position: absolute;left: 0;top: 0;width: 100%;height: 100%;background-size: cover;background: #fff url("../../imgs/loading.gif") no-repeat center;
}/* 下面不是重点 */
.box {width: 800px;min-height: 500px;border: 3px solid orange;border-radius: 5px;position: relative;
}
.news {display: flex;height: 120px;width: 600px;margin: 0 auto;padding: 20px 0;cursor: pointer;
}
.news .left {flex: 1;display: flex;flex-direction: column;justify-content: space-between;padding-right: 10px;
}
.news .left .title {font-size: 20px;
}
.news .left .info {color: #999999;
}
.news .left .info span {margin-right: 20px;
}
.news .right {width: 160px;height: 120px;
}
.news .right img {width: 100%;height: 100%;object-fit: cover;
}
</style>

效果演示:

在这里插入图片描述


http://www.ppmy.cn/ops/15386.html

相关文章

【论文解读系列】从RNN/CNN到大模型全解析

论文&#xff1a;A Survey of Neural Code Intelligence: Paradigms, Advances and Beyond 地址&#xff1a;GitHub&#xff1a;https://github.com/QiushiSun/NCISurvey 文章目录 一、代码模型的发展 1.神经语言建模&#xff08;Neural Language Modeling&#xff09;时代 …

Linux下的进程管理:创建、终止、切换与等待

文章目录 一、引言二、进程创建1、进程创建的概念与场景2、进程创建的方式a、fork() 系统调用b、fork() 后的执行流程 3、进程创建的过程a、进程创建过程b、子进程创建过程 4、父子进程关系与属性继承 三、进程终止1、进程终止的原因2、进程的错误码和退出码a、错误码b、退出码…

python中的进程间通信

进程间数据是否共享 在Python中&#xff0c;进程之间默认是不共享内存的。每个进程都有自己独立的内存空间&#xff0c;这意味着在一个进程中对数据的修改不会影响到另一个进程中的同名数据。然而&#xff0c;Python提供了几种方式来实现进程间的数据共享&#xff1a; 使用 mu…

【前端面试常问】MVC与MVVM

&#x1f525;【前端面试常问】MVC与MVVM&#x1f4a5;&#xff1a;详尽解读与实战指南 前端开发世界中&#xff0c;架构设计犹如高楼之基&#xff0c;决定着代码的组织层次、模块间交互方式以及项目长远的可维护性和扩展性。本文将全方位剖析两种主流前端架构模式——MVC&…

Python自动化系列5

import selenium #工具里的所有的内容都导入 from selenium import webdriver #从selenium 工.具里导入webdriver库 import time #导入time这个模块— Python自带的 #选择chrome这个浏览器&#xff0c;初始化driver可以浏览器进行沟通建立会话 session driver webdriver.Ch…

aysnc-await的用法

aysnc-await是promise的一种特殊语法&#xff0c;它可以更简洁的得到promise aysnc function aysnc 放在函数前定义函数&#xff0c;它规定了这个函数的返回值一定为promise&#xff0c; // 通过new新建一个promise(旧) // let p new Promise(function(resolve,reject){ //…

python基础--文件操作

目标 文件操作的作用文件的基本操作 打开读写关闭 文件备份文件和文件夹的操作 一. 文件操作的作用 思考&#xff1a;什么是文件&#xff1f; 思考&#xff1a;文件操作包含什么&#xff1f; 答&#xff1a;打开、关闭、读、写、复制… 思考&#xff1a;文件操作的的作用…

BFS解决FloodFill算法:(Leetcode:200. 岛屿数量)

题目链接&#xff1a;200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; 本题由于没有给出开始搜索的位置&#xff0c;所以每一个位置都要进行一次广度优先搜索 另外为了不修改原数组数据&#xff0c;需要设置一个bool类型的二维数组vis来判断某个位置是否被搜索过 cl…