Vue-3

vue一步步实现alert功能 原生alert的缺点 会阻塞一切操作,影响用户体验 很多浏览器会默认静止alert,例如微信。 原生alert框样式丑陋。 项目地址: web-style 项目里有css样式和vue组件。目标是快速构建后台系统。有一定自适应的设计。 css 思路:最外层是一个黑色透明撑满全屏幕的div并且是fixed的div.modal-mask。 在mask内部是一个垂直居中的div框大小可以固定。垂直居中方法有几种可选。我选用的是flex。关键性的css代码如下 .modal-mask{ position: fixed; top: 0; left: 0; right: 0; b 立即下载

自定义指令

全局注册指令

  • 文件路径:src/main.js
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false

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

new Vue({
  render: c => c(App)
}).$mount('#app')
  • 文件路径:src/App.vue
<template>
  <div>
    <h1>自定义指令</h1>
    <input v-myFocus type="text" />
  </div>
</template>

<script>
export default {};
</script>

<style>
</style>

局部注册指令

<template>
  <div>
    <h1>自定义指令</h1>
    <input v-myFocus type="text" />
  </div>
</template>

<script>
export default {
  // 局部注册指令
  directives: {
    // 指令名称: 指令的配置项
    myFocus: {
      inserted(el) {
        el.focus();
      },
    },
  },
};
</script>

<style>
</style>

指令的值

<template>
  <div>
    <h1 v-myColor="color1">指令的值</h1>
    <h1 v-myColor="color2">指令的值</h1>
  </div>
</template>

<script>
export default {
  directives: {
    // 指令名称 : 指令的配置项
    myColor: {
      // 1. inserted 提供的是元素被添加到页面中时的逻辑
      inserted(el, binding) {
        // binding.value 即可获取"指令的值"
        el.style.color = binding.value;
      },
      // 2. update 指令的值修改的时候触发,提供的值变化后,dom 更新的逻辑
      update(el, binding) {
        el.style.color = binding.value;
      },
    },
  },
  data() {
    return {
      color1: "red",
      color2: "blue",
    };
  },
};
</script>

<style>
</style>

实现加载效果

目的:实现自定义指令——v-loading 指令封装

实现:

  1. 准备一个 loading 类,通过伪元素定位,设置宽高,实现蒙层
  2. 开启关闭 loading 状态(添加移除蒙层),本质只需要添加移除类即可
  3. 结合自定义指令的语法进行封装复用

代码:

<template>
  <div v-loading="isLoading">
    <ul v-for="item in list" :key="item.id">
      <hr />
      <li><img :src="item.img" alt="" /></li>
      <li>{{ item.title }}</li>
      <li>{{ item.source }}</li>
      <li>{{ item.time }}</li>
    </ul>
    <hr />
  </div>
</template>

<script>
import axios from "axios";
export default {
  data() {
    return {
      list: [],
      isLoading: true,
    };
  },
  async created() {
    // 1. 发送请求,获取数据
    const res = await axios.get("http://hmajax.itheima.net/api/news");
    setTimeout(() => {
      // 2. 更新到list中,用于页面渲染
      this.list = res.data.data;

      // 3. 移除loading效果
      this.isLoading = false;
    }, 3000); // 定时3秒,模拟网速慢
  },
  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");
      },
    },
  },
};
</script>

<style>
.loading:before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background: #fff
    url("https://pic4.zhimg.com/80/v2-d048608d543b55df997675195552f887_720w.webp")
    no-repeat center;
}
</style>

插槽

作用:让组件内部的一些结构支持自定义

默认插槽

默认插槽:组件内定制一处结构

  • 文件路径:src/components/MyDialog.vue
<template>
  <div>
    <hr />
    <h3>温馨提示</h3>
    <p>
      <!-- 1. 在需要定制的地方,使用 slot 占位 -->
      <slot>我是后备内容</slot>
    </p>
    <hr />
  </div>
</template>

<script>
export default {};
</script>

<style>
</style>
  • 文件路径:src/App.vue
<template>
  <div>
    <!-- 2. 使用组件时,组件标签内填入内容 -->
    <MyDialog>你确认要取消收藏吗?</MyDialog>
    <MyDialog>你确认要注销账户吗?</MyDialog>
  </div>
</template>

<script>
import MyDialog from "./components/MyDialog.vue";
export default {
  components: {
    MyDialog,
  },
};
</script>

<style>
</style>

具名插槽

具名插槽:组件内定制多处结构

注意:v-slot:插槽名 可以简化为 #插槽名

  • 文件路径:src/components/MyDialog.vue
<template>
  <!-- 1. 在需要定制的地方,使用 slot 占位 -->
  <div>
    <hr />
    <slot name="title">我是后备内容</slot>
    <p><slot name="content">我是后备内容</slot></p>
    <hr />
  </div>
</template>

<script>
export default {};
</script>

<style>
</style>
  • 文件路径:src/App.vue
<template>
  <div>
    <!-- 2. 使用组件时,组件标签内填入内容 -->
    <MyDialog>
      <template v-slot:title>
        <h3>友情提示</h3>
      </template>
      <template #content>
        <span>>你确认要取消收藏吗?</span>
      </template>
    </MyDialog>
  </div>
</template>

<script>
import MyDialog from "./components/MyDialog.vue";
export default {
  components: {
    MyDialog,
  },
};
</script>

<style>
</style>

作用域插槽

功能:给插槽绑定数据,将来使用组件时可以用

具体演示:

  • 文件路径:src/App.vue
<template>
  <div>
    <MyTable :data="list1">
      <!-- 3. 通过template #插槽名=变量名 接收对象 -->
      <template #default="obj">
        <button @click="del(obj.row.id)">删除</button>
      </template>
    </MyTable>

    <MyTable :data="list2">
      <template #default="obj">
        <button @click="show(obj.row)">查看</button>
      </template>
    </MyTable>
  </div>
</template>

<script>
import MyTable from "./components/MyTable.vue";
export default {
  data() {
    return {
      list1: [
        { id: 1, name: "李小萌", age: 16 },
        { id: 2, name: "王非明", age: 37 },
        { id: 3, name: "任天风", age: 22 },
      ],
      list2: [
        { id: 1, name: "江海燕", age: 28 },
        { id: 2, name: "楼王嘿", age: 35 },
        { id: 3, name: "疆梦中", age: 41 },
      ],
    };
  },
  methods: {
    del(id) {
      this.list1 = this.list1.filter((item) => item.id !== id);
    },
    show(row) {
      alert(`姓名: ${row.name}; 年龄: ${row.age}`);
    },
  },
  components: {
    MyTable,
  },
};
</script>

<style>
</style>
  • 文件路径:src/components/MyTable.vue
<template>
  <table class="my-table">
    <thead>
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="item in data" :key="item.id">
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
        <td>{{ item.age }}</td>
        <td>
          <!-- 1. 给slot标签,添加属性的形式进行传值 -->
          <slot :row="item" msg="测试文本"></slot>
          <!-- 2. 它底层会自动将所有的属性,添加到一个对象中 -->
          <!-- 
              {
                row: { id: 2, name: '王非明', age: 27},
                msg: '测试文本'
              }
           -->
        </td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  props: {
    data: Array,
  },
};
</script>

<style>
.my-table {
  width: 450px;
  text-align: center;
  border: 1px solid #ccc;
  font-size: 24px;
  margin: 30px auto;
}
.my-table head {
  background-color: #1f74ff;
  color: #fff;
}
</style>

单页应用程序

基本概念

  • 单页应用程序:SPA(Single Page Application)

  • 单页面应用——所有功能在一个 html 页面上实现

优点与缺点

在这里插入图片描述

单页面应用:系统类网站 || 内部网站 || 文档类网站 || 移动端站点

多页面应用:公司官网 || 电商类网站

VueRouter

基本认识

VueRouter:它是一个 Vue.js 官方提供的路由管理插件

官网:https://v3.router.vuejs.org/zh/

使用步骤

基本步骤:

  1. 下载 npm i vue-router@3.6.5
  2. 引入 import VueRouter from 'vue-router'
  3. 安装注册 Vue.use(VueRouter)
  4. 创建路由对象 const router = new VueRouter()
  5. 建立关联 new Vue({ render:h => h(App), router }).$mount('#app')
  • 文件路径:src/main.js
// 1. 下载插件
// 在终端运行命令:  npm i vue-router@3.6.5

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'  // 2. 导入插件

Vue.config.productionTip = false
Vue.use(VueRouter)  // 3. 插件初始化

const myRouter = new VueRouter()  // 4. 创建一个路由对象

new Vue({
  render: h => h(App),
  router: myRouter  // 5. 建立关联
}).$mount('#app')

核心步骤:

  1. 创建需要的组件(建议放到 views 目录下)并配置路由规则
  2. 配置导航,配置路由出口(路由匹配的组件显示的位置)
  • 文件路径:src/main.js
// 1. 下载插件
// 在终端运行命令:  npm i vue-router@3.6.5

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'  // 2. 导入插件

Vue.config.productionTip = false
Vue.use(VueRouter)  // 3. 插件初始化

// 6.1 导入资源
import Find from './views/Find.vue'
import My from './views/My.vue'
import Friend from './views/Friend.vue'

// 4. 创建一个路由对象
const myRouter = new VueRouter({
  // 6.2 配置 router 路由规则
  routes: [
    { path: '/find', component: Find },
    { path: '/my', component: My },
    { path: '/friend', component: Friend },
  ]
})

new Vue({
  render: h => h(App),
  router: myRouter  // 5. 建立关联
}).$mount('#app')
  • 文件路径:src/App.vue
<template>
  <div>
    <div>
      <a href="#/find">发现音乐</a><br />
      <a href="#/find">我的音乐</a><br />
      <a href="#/find">我的朋友</a><br />
    </div>
    <div>
      <!-- 路由出口=>匹配的组件所展示的位置 -->
      <router-view></router-view>
    </div>
  </div>
</template>

<script>
export default {};
</script>

<style>
</style>
  • 文件路径:src/views/Find.vue
<template>
  <div>
    <p>发现音乐</p>
    <p>发现音乐</p>
    <p>发现音乐</p>
  </div>
</template>

<script>
export default {
  name: "FindMusic",
};
</script>

<style>
</style>
  • 文件路径:src/views/My.vue
<template>
  <div>
    <p>我的音乐</p>
    <p>我的音乐</p>
    <p>我的音乐</p>
  </div>
</template>

<script>
export default {
  name: "MyMusic",
};
</script>

<style>
</style>
  • 文件路径:src/views/Friend.vue
<template>
  <div>
    <p>我的朋友</p>
    <p>我的朋友</p>
    <p>我的朋友</p>
  </div>
</template>

<script>
export default {
  name: "MyFriend",
};
</script>

<style>
</style>

路由模块封装

  • 文件路径:src/router/index.js
// 导入模块
import Vue from 'vue'
import VueRouter from 'vue-router'

// 导入资源
import Find from '../views/Find.vue'
import My from '../views/My.vue'
import Friend from '../views/Friend.vue'

// 初始化
Vue.use(VueRouter)

// 创建路由对象
const myRouter = new VueRouter({
  routes: [
    { path: '/find', component: Find },
    { path: '/my', component: My },
    { path: '/friend', component: Friend },
  ]
})

// 导出路由对象
export default myRouter
  • 文件路径:src/main.js
import Vue from 'vue'
import App from './App.vue'
import myRouter from "./router/index.js";
Vue.config.productionTip = false


new Vue({
  render: h => h(App),
  router: myRouter  // 建立关联
}).$mount('#app')

声明式导航

router-link

需求:实现导航高亮效果

**vue-router 模块 **提供了一个全局组件 router-link 取代了 a 标签,它有两个功能

  • 能跳转(它本质还是 a 标签)
  • 能高亮(配置颜色样式即可)

原来的 a 标签:

    <div>
      <a href="#/find">发现音乐</a> <br />
      <a href="#/my">我的音乐</a> <br />
      <a href="#/friend">我的朋友</a> <br />
    </div>

现在的 router-link 标签

    <div>
      <router-link to="/find">发现音乐</router-link> <br />
      <router-link to="/find">我的音乐</router-link> <br />
      <router-link to="/find">我的朋友</router-link> <br />
    </div>

自定义匹配类名

const myRouter = new VueRouter({
  routes: [
    { path: '/find', component: Find },
    { path: '/my', component: My },
    { path: '/friend', component: Friend },
  ],
  // link自定义高亮
  linkActiveClass: 'active', // 配置模糊匹配的类名
  linkExactActiveClass: 'exact-active',  // 配置精确匹配的类名
})

跳转传参

  • 查询参数传参
<router-link to="/find?name=for you">发现音乐</router-link>
<template>
  <div>
    <!-- 查询参数传参,获取命令:$route.query.参数名 -->
    <p>音乐名: {{ $route.query.name }}</p>
    <p>发现音乐</p>
    <p>发现音乐</p>
    <p>发现音乐</p>
    <p>发现音乐</p>
  </div>
</template>

<script>
export default {
  name: "FindMusic",
  created(){
    // 在created中,通过下面命令获取路由参数
    // this.$route.query.参数名
  alert(this.$route.query.name)
  }
};
</script>

<style>
</style>
  • 动态路由传参
<router-link to="/find/什么是音乐">发现音乐</router-link> <br />
// 导入模块
import Vue from 'vue'
import VueRouter from 'vue-router'

// 导入资源
import Find from '../views/Find.vue'
import My from '../views/My.vue'
import Friend from '../views/Friend.vue'

// 初始化
Vue.use(VueRouter)

// 创建路由对象
const myRouter = new VueRouter({
  routes: [
    { path: '/find/:words', component: Find },		// "发现音乐"部分
    { path: '/my/:words', component: My },
    { path: '/friend/:words?', component: Friend },	// :words? 与 :words 的区别是加了问号后可以不传参
  ],
})

// 导出路由对象
export default myRouter
<template>
  <div>
    <!-- 动态路由参数,获取命令:$route.params.参数名 -->
    <p>音乐名: {{ $route.params.words }}</p>
    <p>发现音乐</p>
    <p>发现音乐</p>
    <p>发现音乐</p>
    <p>发现音乐</p>
  </div>
</template>

<script>
export default {
  name: "FindMusic",
  created(){
    // 在created中,通过下面命令获取"动态路由参数"
    // this.$route.params.参数名
  alert(this.$route.params.words)
  }
};
</script>

<style>
</style>

重定向与404

// 导入模块
import Vue from 'vue'
import VueRouter from 'vue-router'

// 导入资源
import Find from '../views/Find.vue'
import My from '../views/My.vue'
import Friend from '../views/Friend.vue'
import NotFind from '../views/NotFind.vue'

// 初始化
Vue.use(VueRouter)

// 创建路由对象
const myRouter = new VueRouter({
  routes: [
    { path: '/', redirect: '/my' },   		// 路由重定向
    { path: '/find', component: Find },
    { path: '/my/:words', component: My },
    { path: '/friend/:words', component: Friend },
    { path: '*', component: NotFind },  	// 404页面
  ]
})

// 导出路由对象
export default myRouter

路由模式设置

路由模式默认是采用"hash路由",有个#号,看起来不好看,如何解决?

  • hash 路由---------(默认) 例如:http://127.0.0.1:8080/#/home
  • history 路由----- (常用) 例如:http://127.0.0.1:8080/home
// 导入模块
import Vue from 'vue'
import VueRouter from 'vue-router'

// 导入资源
import Find from '../views/Find.vue'
import My from '../views/My.vue'
import Friend from '../views/Friend.vue'
import NotFind from '../views/NotFind.vue'

// 初始化
Vue.use(VueRouter)

// 创建路由对象
const myRouter = new VueRouter({
  routes: [
    { path: '/', redirect: '/my' },   	// 路由重定向
    { path: '/find', component: Find },
    { path: '/my/:words', component: My },
    { path: '/friend/:words', component: Friend },
    { path: '*', component: NotFind },  // 404页面
  ],
  mode: 'history'	// 路由模式设置为'history'
})

// 导出路由对象
export default myRouter

编程式导航

概念简诉

所谓的编程式导航,就是指用 JS 代码来进行跳转

跳转与路由参数

  • path 路径跳转与路由参数
this.$router.push('路由路径')

this.$router.push({
  path: '路由路径'
})
<template>
  <div>
    <button @click="gotoFriend">我的朋友</button>
    <p>发现音乐</p>
    <p>发现音乐</p>
  </div>
</template>

<script>
export default {
  name: "FindMusic",
  methods: {
    // (1) 简单写法
    // gotoFriend(){
    //   this.$router.push('/friend?key=123456')
    // }

    // (2) 普通写法
    gotoFriend() {
      this.$router.push({
        path: "/friend",
        query: {
          key: 123456
        },
      });
    },
  },
};
</script>

<style>
</style>
  • name 命名路由跳转与路由参数
const myRouter = new VueRouter({
  routes: [
    { path: '/find/:words?', component: Find },
    { path: '/my/:words?', component: My },
    { name: 'friend', path: '/friend/:words?', component: Friend },
  ],
  mode: 'history'
})
<template>
  <div>
    <button @click="gotoFriend">我的朋友</button>
    <p>发现音乐</p>
    <p>发现音乐</p>
  </div>
</template>

<script>
export default {
  name: "FindMusic",
  methods: {
    gotoFriend() {
      this.$router.push({
        name: 'friend',
        // query: {
        //   key: 123456
        // },
        params: {
          words: 123456
        },
      })
    },
  },
};
</script>

<style>
</style>

二级路由

const myRouter = new VueRouter({
  routes: [
    { path: '/', component: Layout, children: [ { path: '/article', component: Article } ] },	// 通过 children 配置项,可以嵌套子路由
    { path: '/my/:words?', component: My }
  ],
  mode: 'history'
})

组件缓存

keep-alive 是什么:

  • keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们
  • keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中

keep-alive 的优点:

  • 在组件切换过程中,把切换出去的组件保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性

keep-alive 的三个属性:

include : 组件名数组,只有匹配的组件会被缓存
exclude : 组件名数组,匹配成功的组件都不会被缓存,而除此之外的组件都缓存
max		: 最多可以缓存多少组件实例
<script>
export default {
    // 组件名:如果没有配置 name,才会找文件名作为组件名
    name: 'LayoutPage'
}
</script>
<template>
  <div>
      <!--
	    只希望 Layout 被缓存,include 需要配置成 :include="组件名数组"
	  -->
      <keep-alive :include=['LayoutPage']>
          <router-view></router-view>
      </keep-alive>
  </div>
</template>
ROS小车定位实战:如何用rf2o_laser_odometry和robot_localization实现精准里程计(附避坑指南) 本文详细介绍了如何利用rf2o_laser_odometry和robot_localization在ROS中实现高精度小车定位。通过激光里程计与状态估计的黄金组合,解决室内移动机器人的定位难题,包括环境搭建、算法配置、多传感器融合策略及实战避坑指南,帮助开发者快速部署稳定可靠的定位系统。 阅读详情

相关推荐

C语言—for循环打印矩形,正三角形,倒三角形,九九乘法,等腰三角形,倒着的等腰三角形(简易版代码)(重点考察for循环嵌套)

本章节教大家如何利用for循环打印正三角形,倒三角形,九九乘法表及等腰三角形(简易版代码)说明:1、循环语句的循环体内又包含另一个完整的循环结构,称为循环结构的嵌套。内嵌的循环语句中还可以再嵌套循环结构,这样就形成多重循环结构的嵌套。2、for 语句、while 语句和 do-while 语句都允许嵌套。三种循环语句可以相互嵌套。3、内层的循环语句必须完全被包含在外层的循环体中,不能发生交叉。

m0_63501145的博客 1695

Vue3警告提示(Alert)

警告提示,展现需要关注的信息,支持:五种类型;无边框;可关闭;辅助性文字介绍;辅助图标;自定义图标;自定义关闭文字;自定义操作项;自定义主题色等;总之,功能丰富,简单易用,总能满足你的想象😁😁

Vue Amazing UI(Vue3 + TypeScript + Vite)组件库唯一开发维护者 6259

MOOS-ivp实战:从零搭建水下机器人通信系统(Ubuntu 22.04版)

本文详细介绍了在Ubuntu 22.04系统上从零开始搭建MOOS-ivp水下机器人通信系统的完整实战流程。内容涵盖环境准备、核心安装、MOOSDB通信模型解析、自定义应用节点开发、以及调试监控工具链的使用,旨在帮助开发者快速掌握这一分布式机器人系统框架,构建稳定可靠的水下机器人通信与控制系统。

snow3的博客 633

VUE3(二十四)自定义alert弹窗组件

我这里自定义了几个alert弹窗组件: 1:带有确定取消的alert弹窗组件:效果如下图所示 代码: /** * 自定义公共函数 */ const utils = { /** * @name: 自定义alert(确定,取消) * @author: camellia * @email: guanchao_gc@qq.com * @date: 2021-01-23 * @param: data string 显示的文字 * @par

camellia的博客 3913

流媒体弱网优化之路(NACK)——纯NACK方案的优化探索

流媒体学习之路(NACK)——纯NACK方案的最高性能 文章目录流媒体学习之路(NACK)——纯NACK方案的最高性能一、NACK简介二、Nack的理解2.1 一种补救策略2.2 什么时候要?2.3 要多少?2.4 怎么要?三、计算分析3.1 rtt强相关3.2 补包次数计算3.3 Nack的定时发送3.4 nack重传限制四、实验   近期在针对纯丢包场景做一些简单的探索实验,一个让我困扰的问题就是:不使用FEC而只是通过纯NACK进行补偿,到底能在实验环境下抵抗多少的丢包呢?每一次丢包补偿的最大时长

qw225967的博客 1万+

用MFRC522+STM32打造智能门禁:从硬件选型到云端控制全流程

本文详细介绍了基于STM32微控制器和MFRC522射频模块构建智能门禁系统的完整流程。从硬件选型、电路设计、底层驱动开发,到系统软件架构与状态机设计,并最终实现通过ESP8266模块接入云端平台(如OneNET)进行远程控制和数据可视化。项目深入探讨了MFRC522的SPI通信、卡片操作流程、天线调试以及云端MQTT集成等关键技术,为嵌入式开发者提供了一个从本地感知到云端管控的物联网项目实战参考。

raspberrypi5的博客 741

vue3报警提示框(vue2.x的extend替代)

vue3 提示框

木玄客的博客 1600

即插即用!5分钟为你的SNN模型添加频谱注意力(DCT-SA模块实战)

本文介绍了如何为脉冲神经网络(SNN)快速集成即插即用的DCT-SA频谱注意力模块。该模块利用离散余弦变换(DCT)在频率域自适应加权特征,能有效提升模型对纹理、边缘的感知能力,并在CIFAR10-DVS等数据集上实现分类精度提升与脉冲发放率下降。文章以SpikingJelly框架和ResNet19为例,提供了详细的代码实现、集成步骤及参数调优实战指南。

kotlin6android的博客 609

vue3全局api组件

vue3全局api组件,类似UI组件的Dialog、alert

不求甚解的博客 5268

基于C#开发ABB机器人上位机系统:从操作控制到数据交互的全方位实现

ABB工业机器人是世界领先的自动化设备之一,广泛应用于焊接、装配、搬运、喷涂、包装等多个行业。机器人控制器:用于控制机器人运动、路径规划、状态监控等。上位机系统:提供人机交互界面,允许操作员与机器人进行交互,实现实时控制、参数调整和数据分析。上位机系统通过与机器人控制器通信,采集机器人状态数据,发送控制指令,实现远程监控和控制操作。通过高效的操作界面和数据交互,可以大大提高机器人的工作效率和系统的可维护性。基于C#开发ABB机器人上位机系统,能够实现高效的机器人控制与实时数据交互。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1178

Qt软件开发-Qt编译zlib完成文件压缩解压(win10)

在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压。或者自己做一些打包工具,那么使用zlib开源就可以很方便的完成。接下来介绍在zlib在windows下如何利用Qt进行编译,调用,介绍mingw、msvc,32/64位编译办法,完成zip文件打包生成例子。可以单文件压缩打包,多文件压缩打包,目录压缩打包等等。

2216

vue和vuejs区别_D3vue-VueJS的D3插件

vue和vuejs区别 D3vue (D3vue) D3 integration with Vue.js. 与Vue.js的D3集成。 View demo 查看演示 Download Source 下载源 d3vue is a plugin for VueJS 2 that allows you to take data from your Vue instance and bind ...

cuk5340的博客 3280

小龙虾 OpenClaw 权限全攻略:轻松激活 elevated (最新版 OpenClaw 自动化任务降智、无权限、无法执行sudo等系统命令、提升 elevated 权限的解决方案)

升级小龙虾 OpenClaw 后权限不足?elevated 报错?📛 本文教你如何正确配置 OpenClaw 权限💻,让自动化任务顺利执行 🚀

XiaoqiangClub的博客 733

深入讲解一下 Vue 3 的核心源码库 vuejs/core

track 负责“依赖收集”,trigger 负责“派发更新”。

u011091936的博客 1388

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Vue3/VueJS技术学习笔记

Vue3/VueJS技术学习笔记 1、第一个Vue.js应用程序 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>hello-vue</title> <!--导入Vue.js,开发环境版本,包含了有帮助的命令行警告--> <script src="https://cdn.jsdelivr.net/npm/

microvulome的博客 1399

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

ranran0306的博客 9692

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Vue3中文文档 - vuejs

[Vue3中文文档 - vuejs](https://vue3js.cn/docs/zh/guide/introduction.html#%E8%B5%B7%E6%AD%A5)

weixin_40945354的博客 1285

【Vuejs】 Vue3 中这样使用 Icon 更优雅

本文介绍了在Vue3项目中优雅使用SVG图标的新方案。通过unplugin-icons插件可以实现: 支持Vue2/Vue3、React等多种框架 基于iconify图标库按需加载上万种图标 自定义SVG图标自动解析加载 配合unplugin-vue-components实现图标和组件自动引入 统一ElementPlus等UI库的图标使用方式 相比传统SVG图标方案,新方法更便捷统一,无需手动引入,开发体验大幅提升。同时支持自动安装图标集、自定义图标集等功能,是目前最优雅的图标解决方案。

油墨香^-^的博客 3469

【Vuejs】802- 如何区别 Vue2 和 Vue3 ?

作者:王立发https://zhuanlan.zhihu.com/p/267040951Vue 3 的 Template 支持多个根标签,Vue 2 不支持Vue 3 有 createA...

pingan8787 7848

【Vuejs】139- Vue3 到底更新了什么?

来自团队 王琛 同学的技术分享Vue3 已经发布一段时间了,这个版本从底层实现到上层 API 设计都发生了非常大的变化,但具体改变了些什么呢?一起简单盘点下:一、Composition API使用传统的option配置方法写组件的时候问题,随着业务复杂度越来越高,代码量会不断的加大;由于相关业务的代码需要遵循option的配置写到特定的区域,导致后续维护非常的复杂,同时代...

pingan8787 638

【Vuejs】1210- Vue 3 将成为新的默认版本

原文地址:https://zhuanlan.zhihu.com/p/460055155英文原文:https://blog.vuejs.org/posts/vue-3-as-the-new-...

pingan8787 491

【Vuejs】1720- 详细聊一聊 Vue3 动态组件

???? 「相关文章」深入浅出 Vue3 自定义指令6 个你必须明白 Vue3 的 ref 和 reactive 问题初中级前端必须掌握的 10 个 Vue 优化技巧分享 15 个 Vue3 全家桶开发的避坑经验动态组件[1]是 Vue3 中非常重要的一个组件类型,它可以让我们在不同的场景下灵活地渲染不同的组件。✨ 快速上手使用动态组件非常简单,我们只需要在模板中使用 <component>...

pingan8787 4699

【Vuejs】1426- 深入解析 Vue 3 基础难点

希望本篇文章能帮你加深对 Vue 的理解,能信誓旦旦地说自己熟练Vue2/3。内容混杂用法+原理+使用小心得,建议收藏,慢慢看。区别生命周期的变化整体来看,变化不大,只是名字大部分需要 +on,功能上类似。使用上 Vue3 组合式 API 需要先引入;Vue2 选项 API 则可直接调用,如下所示。//vue3 <scriptsetup> import{on...

pingan8787 390

vue2 、 vue3 官网

vue2 、 vue3 官网

qq_45852108的博客 3688

【Vuejs】806- TypeScript Vue 3 上手教程

作者:TinssonTaihttps://juejin.im/post/6875713523968802829预估阅读时间:10 分钟Vue3 TS 项目,支持 .vue 和 .tsx ...

pingan8787 482

【Vuejs】1456- Vue3 解构赋值的问题

前言vue3发布以来经历两年风头正盛,现在大有和react 平分天下的势头,我们知道他是基于proxy 实现响应式的能力, 解决了vue2所遗留下来的一些问题,同时也正由于proxy的特性,也提高了运行时的性能凡事有利有弊, proxy虽然无敌,但是他也有本身的局限,从而产生一些我认为的弊端(其实就是不符合js语言的自然书写方式,有的人觉得就是个特殊写法,他不属于弊端)1、 原始值的响应式系统的实...

pingan8787 2644
上一篇: Vue-2
下一篇: 如何删除右键菜单中的WPS与百度网盘
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值