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

vue.js学习(day 14)

 目录

综合案例:商品列表 

自定义指令 

 main.js(全局注册)

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

// //1.全局注册指令
// Vue.directive('focus',{
//   //inserted 会在 指令所在的元素,被插入到页面中时触发
//   inserted(el){
//     //el 就是指令所绑定的元素
//     //console.log(el){
//     el.focus()
//     }
//   }
// )




new Vue({
  render: h => h(App),
}).$mount('#app')

 App.vue(局部注册)

<template>
  <div id="app">
    <h1>自定义指令</h1>
    <input v-focus ref="inp" type="text">
  </div>
</template>

<script>
//import HelloWorld from './components/HelloWorld.vue'

export default {
  // mounted(){
  //   this.$refs.inp.focus()
  // }


  //2.局部注册指令
  directives:{
    //指令名:指令的配置项
    focus:{
      inserted(el){  //inserted:生命周期钩子
        el.focus()
      }
    }
  }
 
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

 自定义指令-指令的值

 App.vue

<template>
  <div>
    <h1 v-color="color1">指令的值1测试</h1>
    <h1 v-color="color2">指令的值2测试</h1>
  </div>
</template>

<script>
export default {
  data () {
    return {
      color1:'yellow',
      color2:'green'
    }
  },
  directives:{
    color:{
      //1.inserted 提供的是元素被添加到页面中时的逻辑
      inserted(el,binding){
        // console.log(el,binding.value);
        // binding.value 就是指令的值
        el.style.color = binding.value
      },

      //2.update 指令的值修改的时候触发,提供值变化后,dom更新的逻辑
      update(el,binding){
        console.log ('指令的值修改了');
        el.style.color = binding.value
      }
    }
  }
}
</script>

<style>

</style>

 小结

自定义指令:v-loding指令封装

 

App.vue 

<template>
  <div class="main">
    <div class="box " v-loading = "isloading">
      <ul>
        <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 class="box2" v-loading="isloading2">

    </div>
  </div>
</template>

<script>
// 安装axios =>  yarn add axios
import axios from 'axios'

// 接口地址:http://hmajax.itheima.net/api/news
// 请求方式:get
export default {
  data () {
    return {
      list: [],
      isloading:true,
      isloading2:true
    }
  },
  async created () {
    // 1. 发送请求获取数据
    const res = await axios.get('http://hmajax.itheima.net/api/news')
    
    setTimeout(() => {
      // 2. 更新到 list 中
      this.list = res.data.data
      this.isloading = false
    }, 2000)
  },

  //自定义指令-指令的值
  directives:{
    Loading:{
      inserted(el,binding){
        binding.value ? el.classList.add('loading') : el.classList.remove('loading')
      },
      update(el,binding){
        binding.value ? el.classList.add('loading') : el.classList.remove('loading')
        //  el.classList.add('loading') → 添加 'loading' 类到按钮
        // el.classList.remove('loading') 加载完成后移除 'loading' 类
       }
    }
  }
}
</script>

<style>
/* 伪类 - 蒙层效果 */
.loading:before {
  content: '';
  position: absolute; 
  /* position: absolute: 使伪元素相对于最近的非static定位祖先元素进行绝对定位。 */
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background: #fff url('./loading.gif') no-repeat center;
}

/* .box2 {
  width: 400px;
  height: 400px;
  border: 2px solid #000;
  position: relative;
} */

.box {
  width: 800px;
  min-height: 500px;
  /*  min-height 用于设置元素的最小高度 */
  border: 3px solid orange;
  border-radius: 5px;
  position: relative;
}
.box2{
  width: 400px;
  height: 400px;
  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.kler.cn/a/417940.html

相关文章:

  • IDEA全局设置-解决maven加载过慢的问题
  • 自动化是语法,智能化是语义与语用
  • qml项目创建的区别
  • ZYNQ详解
  • spring导出多个文件,要求打包成压缩包
  • SpringBoot整合Retry详细教程
  • 从缓存到分布式缓存的那些事
  • 游戏引擎学习第27天
  • Python 在Excel中插入、修改、提取和删除超链接
  • Vivo手机投屏到Windows笔记本电脑,支持多台手机投屏、共享音频!
  • 【linux学习指南】详解Linux进程信号保存
  • Python `def` 函数中使用 `yield` 和 `return` 的区别
  • git安装与配置与相关命令
  • Matlab搜索路径添加不上
  • 人脸识别API解锁智能生活、C++人脸识别接口软文
  • Apache SeaTunnel 自定义连接器适配华为大数据平台集成组件ClickHouse
  • FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现
  • sentinel使用手册
  • 基于java注解实现websocket详解
  • 如何更好地设计SaaS系统架构
  • MATLAB期末复习笔记(上)
  • 基于Java Springboot 求职招聘平台
  • 爬虫框架快速入门——Scrapy
  • QT 实现组织树状图
  • flutter底部导航栏中间按钮凸起,导航栏中间部分凹陷效果
  • Cursor AI快捷键的使用场景及作用