简简单单的Vue3(插件开发,路由系统,状态管理)

既然选择了远方,便只顾风雨兼程 __ HANS许

系列:零基础搭建前后端分离项目
          • 系列:零基础搭建前后端分离项目
          • 插件
          • 路由(vue-router)
          • 状态管理模式(Vuex)

那在上篇文章,我们讲了,Vue的生命周期,Vue的组件,那这篇文章我们讲下更进阶的:插件,路由,状态管理。

插件

插件通常会为 Vue 添加全局功能。插件的范围没有限制——一般有下面几种:

  • 添加全局方法或者属性,如: vue-custom-element
  • 添加全局资源:指令/过滤器/过渡等,如 vue-touch
  • 通过全局 mixin 方法添加一些组件选项,如: vue-router
  • 添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。
  • 一个库,提供自己的 API,同时提供上面提到的一个或多个功能,如 vue-router
  1. 使用插件

    使用全局方法Vue.use(myplus),就可以使用了,但在此事前要引用插件的js,直接引用或者npm i myplus进行安装,然后import myplus from Myplus

  2. 开发插件

Vue.js 的插件应该有一个公开方法 install。这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象:简单来讲,就是自己扩展Vue。

var myPlugins= {
    install(Vue, options) {
        Vue.$data = {
            firstName: "大漠",
            lastName: "W3cplus"
        };
        console.log(`${Vue.$data.firstName}_${Vue.$data.lastName}`);

        // 2. 添加全局资源
        Vue.directive("hello", {
            // 只调用一次,指令第一次绑定到元素时调用
            bind: function () {
                console.log("触发bind钩子函数!");
            },
            // 被绑定元素插入父节点时调用
            inserted: function (el) {
                console.log("触发inserted钩子函数!");
            },
            // 所在组件的`VNode`更新时调用,但是可能发生在其子元素的`VNode`更新之前
            update: function (el) {
                console.log("触发update钩子函数!");
            },
            // 所在组件的`VNode`及其子元素的`VNode`全部更新时调用
            componentUpdated: function (el) {
                console.log("触发componentUpdated钩子函数!");
            },
            // 只调用一次,指令与元素解绑时调用
            unbind: function (el) {
                console.log("触发unbind钩子函数!");
            }
        });
        //// 3. 注入组件
        Vue.mixin({
            methods: {
                update() {
                    this.message = "Hi! 大漠";
                },
                uninstall() {
                    this.message = "";
                },
                install() {
                    this.message = "Hello!W3cplus";
                }
            }
        });

        Vue.prototype.$message = "我是一只小小鸟....";
        Vue.prototype.showMessage = value => {
            console.log(value);
        };
    }
};

例子:https://xhl592576605.github.io/markdown/零基础搭建前后端分离项目/Code/Vue/sample/10插件.html

路由(vue-router)

vue-router也是一个插件。

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:

  • 嵌套的路由/视图表
  • 模块化的、基于组件的路由配置
  • 路由参数、查询、通配符
  • 基于 Vue.js 过渡系统的视图过渡效果
  • 细粒度的导航控制
  • 带有自动激活的 CSS class 的链接
  • HTML5 历史模式或 hash 模式,在 IE9 中自动降级
  • 自定义的滚动条行为

安装,跟上面的一样,可以直接引用<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>,可以使用npm来安装使用。

例子:https://xhl592576605.github.io/markdown/零基础搭建前后端分离项目/Code/Vue/sample/12路由系统.html

  1. 定义路由

    要使用路由,就必须定义一个路由以及一个路由出口,也就是显示的内容的容器。

    //  定义路由
    const routes = [
        { path: ‘/foo‘, component: Foo },
        { path: ‘/bar‘, component: Bar }
    ]
    //创建 router 实例,然后传 `routes` 配置
    const router = new VueRouter({
        routes // (缩写) 相当于 routes: routes
    })
    // 创建和挂载根实例。
    // 记得要通过 router 配置参数注入路由,
    // 从而让整个应用都有路由功能
    const app = new Vue({
        router
    }).$mount(‘#app‘)
    
    
    <!-- 路由出口 -->
    <!-- 路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>
    
  2. 跳转
     <router-link to="/foo">Go to Foo</router-link>
    

    这样的语句就可以跳转/foo了,然后会根据配置好的路由,跳转相对用地址。在路由出口显示你的/foo所关联的组件形成的内容。如果需要内部调用的话,可以使用router.push(‘/foo‘)

  3. 跳转+参数
      <router-link :to="{path:‘/bar‘,params:{message:‘params传值‘},query:{message:‘query传值‘}}">Go to Bar</router-link>
    

    这样的语句就可以跳转/bar了,并且传递携带的参数。然后会根据配置好的路由,跳转相对用地址。在路由出口显示你的/bar所关联的组件形成的内容。如果需要内部调用的话,可以使用router.push({ path: ‘register‘, query: { message:‘query传值‘ }})

    注意:如果提供了 path,params 会被忽略,也就是params不会传递过去的

    那么怎么获取传递过去的参数呢?

    vm.$route.query.message;
    vm.$route.params.message;
    

    像这样就可以获取到路由的数据了,vm代表的是Vue实例本身。

状态管理模式(Vuex)

vuex也是一个插件。

Vuex是一个专门为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化.

Vuex简单来讲,就是一个或多个组件可以共享一个对象。对象更新,相对应的组件也更新,这样就可以解决同级组件的交互问题。

安装:同样道理,跟上面一样,可以直接引用<script src="https://unpkg.com/vuex"></script>,也可npm安装。

例子:https://xhl592576605.github.io/markdown/零基础搭建前后端分离项目/Code/Vue/sample/13状态管理模式Vuex.html

const store = new Vuex.Store({
            state: {
                /**作为共享状态添加*/
                products: [
                    { name: ‘鼠标‘, price: 20 },
                    { name: ‘键盘‘, price: 40 },
                    { name: ‘耳机‘, price: 60 },
                    { name: ‘显示屏‘, price: 80 }
                ]
            },
            getters: {
                saleProducts: (state) => {
                    let saleProducts = state.products.map(product => {
                        return {
                            name: product.name,
                            price: product.price / 2
                        }
                    })
                    return saleProducts;
                }
            },
            mutations: { //添加mutations,方法只有同步,不能异步
                minusPrice(state, payload) {
                    let newPrice = state.products.forEach(product => {
                        product.price -= payload
                    })
                }
            },
            actions: { //添加actions context为store对象
                minusPriceAsync(context, payload) {
                    setTimeout(() => {
                        context.commit(‘minusPrice‘, payload); //context提交
                    }, 2000)
                }
            }

            })

上面就定义了一个store(仓库),仓库有stategettersmutationsactions,我们一个个讲过去。

  1. state

    state就是Vuex中的公共的状态, 我是将state看作是所有组件的data, 用于保存所有组件的公共数据.也就是说,他是公有的,是所有组件可以共享的。

  2. getters

    getters属性理解为所有组件的computed属性, 也就是计算属性. vuex的官方文档也是说到可以将getter理解为store的计算属性, getters的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

  3. mutations

    mutaions理解为store中的methods, mutations对象中保存着更改数据的回调函数,该函数名官方规定叫type, 第一个参数是state, 第二参数是payload, 也就是自定义的参数。

  4. actions

    actions 类似于 mutations,不同在于:

  • actions提交的是mutations而不是直接变更状态
  • actions中可以包含异步操作, mutations中绝对不允许出现异步
  • actions中的回调函数的第一个参数是context, 是一个与store实例具有相同属性和方法的对象
  • 我们可以使用setTimeout来模拟异步操作,或者Promise来进行异步。

在这篇文章,我们更深入去了解Vue,通过Vue官方自带的插件,学习了更多,插件我们可以根据需求自己开发,官方提供的路由,状态管理等插件,在开发也起到非常大的重用,

在接下来的最后一篇文章,我们会讲述vue-cli3.0来创建vue项目与Vue项目的调试。

在最后感谢:https://www.jianshu.com/p/a804606ad8e9

原文地址:https://www.cnblogs.com/xuhuale/p/10281617.html

时间: 2024-08-28 12:06:01

简简单单的Vue3(插件开发,路由系统,状态管理)的相关文章

40行程序把Vue3的响应式集成进React做状态管理

本文参考原文-http://bjbsair.com/2020-03-22/tech-info/2095/ 前言 vue-next是Vue3的源码仓库,Vue3采用lerna做package的划分,而响应式能力@vue/reactivity被划分到了单独的一个package中. 如果我们想把它集成到React中,可行吗?来试一试吧. 使用示例 话不多说,先看看怎么用的解解馋吧. // store.ts import { reactive, computed, effect } from '@vue

结合项目学习vue2(路由vue-router,状态管理vuex)

前期: index.html <div id="app"> <h1>{{intro}}</h1> <router-view></router-view> </div> app.js var App = new Vue({ router,//router:router的缩写 //传一个路由属性给 Vue 实例,路由现在被定义为一个在 router 实例里的一个routes 选项数组 data: { intro: &q

Linux查看系统状态命令

Linux查看系统状态命令     iostat iostat 命令详细地显示了存储子系统方面的情况.你通常用iostat来监控存储子系统总体上运行状况如何,并且在用户注意到服务器运行缓慢之前提早发现输入/输出缓慢的问题.相信我,你应该在用户发现这些问题之前先发现这些问题! meminfo和free meminfo为你详细显示了内存方面的情况.你通常可以使用另一个程序,比如cat和grep,来访问meminfo的信息.比如说,cat /proc/meminfo为你详细显示了服务器的内存在任何一个

linux系统日常管理

以下资料来源于<跟阿铭学Linux> 1.监控当前系统状态 1. w查看当前系统的负载 [[email protected] sbin]# w 15:23:46 up 3:34, 2 users, load average: 0.03, 0.05, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 - 12:26 2:55m 0.11s 0.11s -bash root pts/0 10.72.137.53 1

Linux系统日常管理2 tcpdump,iptables

Linux系统日常管理2 tcpdump,iptables  Linux抓包工具 tcpdump 系统自带抓包工具 如果没有安装,需要安装之后才可以使用 安装: [[email protected] ~]# yum install -y tcpdump tcpdump -nn 不转换顿口的名字,直接显示端口号 tcpdump -nn -i eth0 tcp and host 192.168.0.1 and port 80 抓取192.168.0.1ip地址的80端口的tcp包,并且不进行端口名字

TG-NET智能流控路由系统监控

监控网络系统是网络管理员最基本的工作,管理员通过观察系统运行的相关信息来监督.管理所有的网络.每天盯着网络中所有的系统页面,这对网络管理员来说是非常繁琐同时枯燥的,TG-NET智能流控路由器可视化管理页面可以让网络管理员轻松监督网络. 登陆路由器后,查看此功能,可以了解路由器目前工作状况,作为判断网络故障和使用率的依据之一. 路由器负荷,有图表实时显示目前系统CPU占用资源率,内存使用率,当前连接数,可以直观的了解路由器的资源使用情况. 接口状态,直观的显示当前网卡的状态,物理连接是否正常,网络

深入理解 react-router 路由系统

范洪春 在 web 应用开发中,路由系统是不可或缺的一部分. 在浏览器当前的 URL 发生变化时,路由系统会做出一些响应,用来保证用户界面与 URL 的同步. 随着单页应用时代的到来,为之服务的前端路由系统也相继出现了. 有一些独立的第三方路由系统,比如 director,代码库也比较轻量. 当然,主流的前端框架也都有自己的路由,比如 Backbone.Ember.Angular.React 等等. 那 react-router 相对于其他路由系统又针对 React 做了哪些优化呢? 它是如何利

迷你MVVM框架 avalonjs 学习教程20、路由系统

SPA的成功离开不这三个东西,分层架构,路由系统,储存系统.分层架构是我们组织复杂代码的关键,这里特指MVVM的avalon:路由系统是将多个页面压缩在一个页面的关键:储存系统特指本地储存,是安全保存大量数据的关键.本章节介绍的是avalon三柱臣之一的mmRouter(内含mmHistory). 我们先上一个示例吧. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit

Vue状态管理vuex

转: https://www.cnblogs.com/xiaohuochai/p/7554127.html 前面的话 由于多个状态分散的跨越在许多组件和交互间各个角落,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue提供了vuex.本文将详细介绍Vue状态管理vuex 引入 当访问数据对象时,一个 Vue 实例只是简单的代理访问.所以,如果有一处需要被多个实例间共享的状态,可以简单地通过维护一份数据来实现共享 const sourceOfTruth = {} const vmA = new