自定义Angular插件 - 网站用户引导

news/2024/5/12 10:42:21/文章来源:https://blog.csdn.net/weixin_33863087/article/details/85766159

最近由于项目进行了较大的改版,为了让用户能够适应这次新的改版,因此在系统中引入了“用户引导”功能,对于初次进入系统的用户一些简单的使用培训training。对于大多数网站来说,这是一个很常见的功能。所以在开发这个任务之前,博主尝试将其抽象化,独立于现有系统的业务逻辑,将其封装为一个通用的插件,使得代码更容易扩展和维护。

无图无真相,先上图:

training demo

关于这款trainning插件的使用很简单,它采用了类似Angular路由一样的配置,只需要简单的配置其每一步training信息。

  • title:step的标题信息;
  • template/templateUrl: step的内容模板信息。这类可以配置html元素,或者是模板的url地址,同时templateUrl也支持Angular route一样的function语法;
  • controller: step的控制器配置;在controller中可注入如下参数:当前step – currentStep、所有step的配置 – trainnings、当前step的配置 – currentTrainning、以及下一步的操作回调 – trainningInstance(其中nextStep:为下一步的回调,cancel为取消用户引导回调);
  • controllerAs: controller的别名;
  • resolve:在controller初始化前的数据配置,同Angular路由中的resolve;
  • locals:本地变量,和resolve相似,可以传递到controller中。区别之处在于它不支持function调用,对于常量书写会比resolve更方便;
  • placement: step容器上三角箭头的显示方位,
  • position: step容器的具体显示位置,这是一个绝对坐标;可以传递{left: 100, top: 100}的绝对坐标,也可以是#stepPanelHost配置相对于此元素的placement位置。同时它也支持自定义function和注入Angular的其他组件语法。并且默认可注入:所有step配置 – trainnings,当前步骤 – step,当前step的配置 – currentTrainning,以及step容器节点 – stepPanel;
  • backdrop:是否需要显示遮罩层,默认显示,除非显示声明为false配置,则不会显示遮罩层;
  • stepClass:每一个step容器的样式信息;
  • backdropClass: 每一个遮罩层的样式信息。

了解了这些配置后,并根据特定需求定制化整个用户引导的配置信息后,我们就可以使用trainningService的trainning方法来在特定实际启动用户引导,传入参数为每一步step的配置信息。并可以注册其done或者cancel事件:

trainningService.trainning(trainningCourses.courses).done(function() {vm.isDone = true;});

下面是一个演示的配置信息:

    .constant('trainningCourses', {courses: [{title: 'Step 1:',templateUrl: 'trainning-content.html',controller: 'StepPanelController',controllerAs: 'stepPanel',placement: 'left',position: '#blogControl'},{title: 'Step 3:',templateUrl: 'trainning-content.html',controller: 'StepPanelController',controllerAs: 'stepPanel',placement: 'top',position: {top: 200,left: 100}},...{stepClass: 'last-step',backdropClass: 'last-backdrop',templateUrl: 'trainning-content-done.html',controller: 'StepPanelController',controllerAs: 'stepPanel',position: ['$window', 'stepPanel', function($window, stepPanel) {// 自定义函数,使其屏幕居中var win = angular.element($window);return {top: (win.height() - stepPanel.height()) / 2,left: (win.width() - stepPanel.width()) / 2}}]}]})

本文插件源码和演示效果唯一codepen上,效果如下:

See the Pen ng-trainning by green (@greengerong) on CodePen.

在trainning插件的源码设计中,包含如下几个要点:

  • 提供service api。因为关于trainning这个插件,它是一个全局的插件,正好在Angular中所有的service也是单例的,所以将用户引导逻辑封装到Angular的service中是一个不错的设计。但对于trainning的每一步展示内容信息则是DOM操作,在Angular的处理中它不该存在于service中,最佳的方式是应该把他封装到Directive中。所以这里采用Directive的定义,并在service中compile,然后append到body中。
  • 对于每一个这类独立的插件应该封装一个独立的scope,这样便于在后续的销毁,以及不会与现有的scope变量的冲突。
  • $q对延时触发的结果包装。对于像该trainning插件或者modal这类操作结果采用promise的封装,是一个不错的选择。它取代了回调参数的复杂性,并以流畅API的方式展现,更利于代码的可读性。同时也能与其他Angular service统一返回API。
  • 对于controller、controllerAs、resolve、template、templateUrl这类类似路由的处理代码,完全可以移到到你的同类插件中去。它们可以增加插件的更多定制化扩展。关于这部分代码的解释,博主将会在后续文章中为大家推送。
  • 利用$injector.invoke动态注入和调用Angular service,这样既能获取Angular其他service注入的扩展性,也能获取到函数的动态性。如上例中的屏幕居中的自定义扩展方式。

这类设计要点,同样可以运用到想modal、alert、overload这类全局插件中。有兴趣的读者,你可以在博主的codepen笔记中阅读这段代码http://codepen.io/greengerong/pen/pjwXQW#0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_746844.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化

首先,先简单的谈一下什么是序列化与反序列化,序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化(Deser…

新站推荐3-中国版的Smarterer“一问一答”网站

过去的一年,我们曾连续报道了美国的在线技能测试平台Smarterer。用户可在60秒时间内回答一定数量的问题,从而向雇主证明自己所擅长的技能。 受它的启发,北京的HiAll团队近日推出了中国版的Smarterer“一问一答”网站,并增加了在线…

网站导航(TreeView 控件)

TreeView 是让人印象最深刻的导航控件之一,不仅因为它允许呈现富树视图,还因为它支持按需填入树的部分(不需要刷新整个页面)。但最重要的是,它支持很多样式来改变它的外观。 通过几个基本的属性,可以把 Tre…

ASP.NET MVC 学习网站

转载于:https://www.cnblogs.com/nlsoft/archive/2013/03/24/2978563.html

大流量网站性能优化:一步一步打造一个适合自己的BigRender插件(转)

BigRender 当一个网站越来越庞大,加载速度越来越慢的时候,开发者们不得不对其进行优化,谁愿意访问一个需要等待 10 秒,20 秒才能出现的网页呢? 常见的也是相对简单易行的一个优化方案是 图片的延迟加载。一个庞大的页面…

运行Silverlight3 的网站弹出 IE 安全确认框

问题贴:http://social.microsoft.com/Forums/zh-CN/partnercndevsilverlight/thread/b2a133a3-05ab-4698-ba91-2db6a5e1d736 Q: 程序用Silverlight3写的!但是客户端安装了 Silverlight4, 有时候会弹出下面确认框. 如果在安装Silverlight3的客户端访问则不会出现上面…

Python的scrapy之爬取boss直聘网站

在我们的项目中,单单分析一个51job网站的工作职位可能爬取结果不太理想,所以我又爬取了boss直聘网的工作,不过boss直聘的网站一次只能展示300个职位,所以我们一次也只能爬取300个职位。 jobbossspider.py: # -*- coding: utf-8 -*…

ASP.NET网站部署问题集

这几天为了给客户演示我们的项目,发现原来程度在开发环境和部署环境中还不太一样,原本在开发环境中程度运行的好好的,而部署后装在服务器则可能产生不少的错误。因此记录下所遇到的问题,方便以后查询同时也希望能帮遇到相关问题的…

多屏设备网站设计

2019独角兽企业重金招聘Python工程师标准>>> 解决方案: 不同域名 为不同设备屏幕编写代码 相同域名 判断设备类型选择不同的视图 自适应网页设计 转载于:https://my.oschina.net/u/190049/blog/173248

一个在线学习正则表达式的网站

今天发现了一个不错的网站regexr.com,可以在线学习正则表达式。 如图,网站左边包含了常用的正则表达式,我们可以随时参考,右边是一些示例文字,英文段落、电话号码、网址、电子邮箱地址等都有。网站上面可以输入正则表达…

瞬时响应:网站的高性能架构

原文地址:http://blog.csdn.net/taochangchang/article/details/14105327 什么叫高性能的网站? CDN全称Content Delivery Network,即内容分发网络。腾讯提供的CDN服务与一般意义上的CDN服务是一样的,旨在将网站的静态内容发布到最…

云瓣影音网站微信端(已开源)

随着该项目的发布到线上(小打小闹),即将又要开启另一段崭新的旅程。强迫自己停下来写写所学所得,个人认为总结和分享是一种很棒的学习方式。那让我们先来瞧瞧项目长的什么样。如果着急要源码的朋友,可以下拉到最后~~ 微信端部分展现 从微信端…

jitter 如何优化网络_网络推广如何做好网站SEO优化

网络推广做好网站整站SEO优化的方式有很多,如何才能做好SEO优化?一、定位网站关键词SEO给一个网站刚开始做优化的时候,不是立马就设置关键词,而是先分析该网站主要是做什么产品/服务。知道网站的目的是做什么,是卖产品…

如何把自己的网站部署在网上_新手如何自己建网站?

在当前,生活上很多事情已经和互联网息息相关了,每个我们都会网上浏览各种网站,新闻网站看新闻,购物网站在线购买,视频网站可以看视频,各种类型的网站基本都会有,企业建网站为了宣传和提供服务&a…

移动建站平台

搜狐快站是一个很不错的移动建站平台,而且很多功能现在都免费了。这个消息,对于我们这些草根创业者来说,无疑是天上掉了一个大馅饼砸到了我们的头上。既然馅饼掉到了俺们的头上了,咱们就吃了吧。对于搜狐快站,我就不和…

网站刷关键词_百度关键词指数怎样刷,怎么样刷关键词的权重?重庆百度快照排名...

我们在做网站优化的时候,通常会去看关键词的百度指数,选择那些有指数的关键词来重点优化。虽然原则上百度指数是自然形成的,但是我们通过某些方式,也能够有效的刷百度指数。本文重点给大家介绍下百度关键词指数怎样刷,…

unbantu下安装mysql_「ubuntu安装mysql」五:在Ubuntu 16.04下安装MySQL - seo实验室

ubuntu安装mysql1,首先执行下面三条命令:执行第一条命令:sudo apt-get install mysql-server如下图:输入 y ,下载安装时会出现要求设置密码的界面:输入自己想设置的密码,之后再次输入确认密码。…

关注经典:CSS Awards 获奖网站作品赏析《第一季》

每天都有很多新的网站推出,其中不乏一些设计极其优秀的作品。这个系列的文章,我为大家挑选了2012年赢得 CSS Awards 大奖的50个最佳网站。这些鼓舞人心的网站作品代表了网页设计的最高水平,相信你可以得到很大的启发。 您可能感兴趣的相关文章…

ios图片放大之后如何不模糊_几个图片处理的网站

图片来源 :http://pexels.com在制作PPT时候我们会常常遇到以下的问题:问题1:有了一张原图,想找一张像素更高的图片;问题2:使用的图片像素太低、尺寸太小、模糊等;问题3:使用的图片太…

node mysql 搭建博客_用Node ejs模板 和Mysql搭建一个 个人博客网站基础

koa2-blog本项目是采用koa2框架制作的开源blog系统如果对您有帮助,您可以点右上角 "Star" 支持一下 谢谢! ^_^如果你觉得对你有帮助,可以点击folk,或者follow一下,我会不定时跟新一些有趣的东西.~~~ 0.0koa2…