使用avalon2 去构建一个 app-route

虚树极昼
• 阅读 2796

avalon2 的相关文章
https://segmentfault.com/blog/jslouvre

其实框架就是让你使用起来简单些

关于路由其实用一个轻便的框架就可以了

https://github.com/visionmedia/page.js

路由就是根据url后面的路径不同变换代码

前端路由由于其特殊性 最常见表述为这样的形式

#!/contact/me
<ul>
    <li><a href="./index">index</a></li>
    <li><a href="#whoop">#whoop</a></li>
    <li><a href="./about">/about</a></li>
    <li><a href="./contact">/contact</a></li>
    <li><a href="./contact/me">/contact/me</a></li>
    <li><a href="./not-found?foo=bar">/not-found</a></li>
</ul>

然后我们直接上page.js使用代码

<script>
    page.base('');
    page('/', index);
    page('/index', index);
    page('/about', about);
    page('/contact', contact);
    page('/contact/:contactName', contact);
    page({
        hashbang:true
    });

    function index() {
    }

    function about() {
    }

    function contact(ctx) {
    }
</script>

page.js 可以使你使用hashbang

现在我们开始写组件

avalon2 组件写法
https://segmentfault.com/a/1190000004949412

定义组件

avalon.component('ms-approute', {
    template: '<div class="zl-view"><slot name="page"></slot></div>',
    defaults: {
    },
    soleSlot: 'page'
});

使用组件

<template ms-widget="[{is:'ms-approute'},@approuteconfig]">
    <div slot="page" class="zl-page" data-route="index" >index</div>
    <div slot="page" class="zl-page" data-route="about">about</div>
    <div slot="page" class="zl-page" data-route="contact">contact</div>
</template>

js

 function deepFind(obj, path) {
    var paths = path.split('.')
            , current = obj
            , i;

    for (i = 0; i < paths.length; ++i) {
        if (current[paths[i]] == undefined) {
            return undefined;
        } else {
            current = current[paths[i]];
        }
    }
    return current;
}

var Approute = function (options) {
    var lastRoute = '';
    var lastRouteEle = {};
    var ele = {};

    function check(route) {
        var length = ele.target.children.length;
        for (var i = 0; i < length; i++) {
            (function (index) {
                var page = ele.target.children.item(index);
                if (page.dataset.route == route) {
                    lastRoute = route;
                    lastRouteEle = page;
                    page.setAttribute("selected", "");
                }
            })(i);
        }
    }

    function emit(newValue, oldValue) {
        lastRouteEle.removeAttribute("selected");
        check(newValue);
    }

    return {
        emit: emit,
        config: {
            onInit: function (a) {
                console.log("onInit!!");
            },
            onReady: function (a) {
                console.log("onReady!!");
                var self = this;
                ele = a;
                var route = deepFind(self, options.path);
                check(route);
            },
            onViewChange: function (a) {
                console.log("onViewChange!!");
            },
            onDispose: function (a) {
                console.log("onDispose!!")
            }
        }
    }
};

var approute = new Approute({
    path: "route"
});

var con = function () {
    return {
        $id: "test",
        route: "index",
        approuteconfig: approute.config
    }
};

var vm = avalon.define(con());

vm.$watch("route", function (newValue, oldValue) {
    approute.emit(newValue, oldValue);
});
点赞
收藏
评论区
推荐文章
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
4年前
Angular 中 ngTemplateOutlet 的用法以及ng
一、引言今天看到文章:https://segmentfault.com/a/1190000015944548。于是专门研究一下ngTemplateOutlet用法!!!!官方定义:NgTemplateOutlet: 它是结构指令,根据一个提前备好的TemplateRef(https://www.
Stella981 Stella981
4年前
JavaScript 核心原理精讲【朋友圈已刷屏】
作为一名前端工程师,JavaScript你一定每天都在用。但是,即便工作5年以上的前端也不一定用得非常熟,甚至很多前端对JavaScript的掌握程度仅仅停留在会用的层面。而且Vue/React等框架的便利,更是让前端人无需苦学JavaScript原生,就可以快速构建一个网页。它解决了开发者短期的痛点,却为依赖框架开发的程序员埋下长期隐
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
4年前
CSS _text
参考:https://segmentfault.com/q/1010000007136263法一:textalignlast:justify;html<div<pclass"item"<labelfor"name"class"itemLabel"姓名</la
Stella981 Stella981
4年前
Spring Boot日志集成
!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star
Stella981 Stella981
4年前
Jenkins集群构建一个Sprintboot项目
前置准备一台Liunx主机:主机需要安装Git,JDK,Maven。我们这里是通过集群的方式到子节点去构建项目,如需添加节点,欢迎查看文章:Jenkins添加服务器节点(https://my.oschina.net/piaoxianren/blog/4272201)一个Springboot项目我在这里提供了一个简单
Stella981 Stella981
4年前
Canvas:技术小结
Canvas:技术小结资料【教程:MDN官方中文教程】https://developer.mozilla.org/zhCN/docs/Web/API/Canvas\_API/Tutorial【系列博客:每天一点Canvas动画】https://segmentfault.com/blog/z
Stella981 Stella981
4年前
Spring Boot中的跨域,为什么加了 Spring Security 就失效了呢?
来自:SegmentFault,作者:欧阳我去链接:https://segmentfault.com/a/1190000019485883作为一个后端开发,(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2F
Stella981 Stella981
4年前
Laravel处理session(会话)的方法详解
在Web应用程序中,有必要识别跨越请求的用户并为每个用户保存数据,为此,像Laravel这样的框架提供了一种称为会话的机制。本篇文章就来为大家介绍关于Laravel处理session(会话)的方法。!laravel(https://oscimg.oschina.net/oscnet/f7951cdc35af1b61cc4dd6bd63973e2924
Stella981 Stella981
4年前
Django 之 流程和命令行工具
一、一个简单的web框架框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演。对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。!(https://os
虚树极昼
虚树极昼
Lv1
故国山川,故园心眼,还似王粲登楼。
文章
4
粉丝
0
获赞
0