js 中rewrap-ajax.js插件实例代码


Posted in Javascript onOctober 20, 2017

最近写了一个JS插件,用圈内的话说叫造了个轮子,造的好与不好都不是自己说了算,关键还是大家用的好与不好。

当然我自己也在使用,由于个人偏爱与喜好,所以未能借签其他Ajax框架的写法,目前的版本都是以版本一进行往上整合的成果,所以你想要全面了解内部的结构,可以先从版本一开始看起。

现在我们说说整体的设计结构,版本一是好友收集整理的方法,基础的写法已经成型,调用nativeAjax方放即可,方法内部有三个参数,第一个为ajax的属性,第二个为成功的函数,第三个为错误的函数,具体如下:

nativeAjax(postOption,function(data){
 // 3.1、请求成功回调
 console.log(data);
},function(error){
 // 3.2、请求失败回调,返回HTTP状态码
 console.log(error);
});

基于以上的设计模式,然后给他进行二次封装,首先ajax的服务属性固定不变,那么我们可以把所有的ajax properties绑定到对象上即可,如果直接绑定在指定的对象上,其实我们只管给参数和拿参数,省了很多事情,这个过程简单了不少,那么灵活性就不会很高。如果我们想自己在内部进行封装,那么就要求高灵活性和可复用属性,所以我把属性放在了function函数里面,于是在内部使用this指针绑定ajax属性进行调用,同时可以在内部进行插件的再次封装,这是我所理解的这个版本的内部结构的设计模式。

版本二rewrap-ajax调用的外部结构类似jq的JQ.fn属性,是以链式结构的对象属性方法来使用的,所以我们在<script>内部使用wrap.service(`ajax`, foo)即可,然后foo函数内部具有ajax的服务属性,我们只要把ajax的属性绑定到this指针上即可,ajax的get分别有URL,TYPE,SUCCESS,ERROR四个属性,并且这4个属性都支持大小写的格式。然后this.success,this.error是二个方法,分别是调用成功的数据请求和调用错误状态的捕获,并且this.success和this.error都拥有一个参数。

wrap.service('ajax',function ajax() {
 // 支持大小写
 this.URL = "query.do"
 this.TYPE = "GET"
 this.SUCCESS = function(data) {
  var val = data;
  console.log(val)
 };
 this.ERROR = function(err) {
  console.log(err)
 };
});

版本三rewrap-ajax保持版本二的外部结构和this写法,this指针上多了二个功能,分别是props和methods方法,其中props方法内部return返回的结构为键值对的数据格式,具有多个state...状态,比如:

return {
  State_01: [{ class : ‘.main', static: 'color', tip: 'message', content: 'container'}],
  State_02: [{ class : ‘.main', static: 'color'}],
  State_03: [{ class : ‘.main'}]
}

其中每一个state状态对应的value值必须是使用数组[]保存,数组内部必须是一个对象{},对象的属性以常规格式要求,对象对应的value必须是一个dom节点能访问的Element元素(或node节点,class类,id,tag标签等等)。

然而methods方法的内部结构为常规的对象调用函数的格式,其中return返回的对象key键为API的方法,注意它不支持自定义写法,返回的对象的value为函数写法,那么函数方法接收一个参数,此参数为props管道内部的state状态属性。并且函数的方法内部使用this指针写法,如下:this.el().add()

完整结构:

return {
 addClass: function (scope){
  this.el([scope.class,scope.static]).add()
 },
 removeClass: function (scope){
  this.el([scope.class,scope.tip]).remove()
 },
 pushHtml: function (scope){
  this.el([scope.static,scope.class]).push()
 },
 hasClass: function (scope){
  this.el(scope.define.content).has()
 }
}

其中.el()方法内部的参数通过props管道流出状态属性,此属性的$scope作用域为state属性,参数接收的结果为字符串,必须是从props获得的字符串,多个字符串的结果可以使用数组的[]形式储存,那么这些属性都具有这个API方法。el()后面的add方法的作用为当前的元素调用的add方法,然而add绑定的方法是API方法,比如addClass就是rewrap-ajax内部的API方法,但是你在外部调用的时候,可以使用你自定义的add方法去实现addClass方法,方法内部不需要参数,但是外部管道调用add是否需要参数取决与rewrap-ajax内部的API方法。所以之后会公开API方法。

外部调用的方式,通过作用域$scope的形式获得props属性和methods方法,外部调用如下:

this.ERROR = function( $scope, err ) {
 $scope.$props.$el($scope.$props.$scope.define.static).add('error_message')
 $scope.$props.$el($scope.$props.$scope.define.static).push('调用出错 error')
 $scope.$props.$el($scope.$props.$scope.define.tip).remove('show')
 console.log(err)
}

目前$scope是作为方法的第一个参数流进来,那么元素的管道为scope.props.,获得元素方法的管道为scope,获得元素方法的管道为scope.props.el(),元素调用API的方法为:add(),remove(),push()等等。

rewrap-ajax详细GIT地址:https://github.com/ZWLTZ/rewrap-ajax

总结

以上所述是小编给大家介绍的js 中rewrap-ajax.js插件实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js导航菜单(自写)简单大方
Mar 28 Javascript
php跨域调用json的例子
Nov 13 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
React key值的作用和使用详解
Aug 23 Javascript
详解Vue-Router源码分析路由实现原理
May 15 Javascript
在Express中提供静态文件的实现方法
Oct 17 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 jQuery
从零开始在vue-cli4配置自适应vw布局的实现
Jun 08 Javascript
JS实现点击掉落特效
Jan 29 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
Oct 20 #jQuery
JS 中使用Promise 实现红绿灯实例代码(demo)
Oct 20 #Javascript
用JavaScript做简易的购物车的代码示例
Oct 20 #Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 #Javascript
phantomjs导出html到pdf的方法总结
Oct 19 #Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
Oct 19 #Javascript
vue resource post请求时遇到的坑
Oct 19 #Javascript
You might like
PHP中的integer类型使用分析
2010/07/27 PHP
php实现复制移动文件的方法
2015/07/29 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
python实现八大排序算法(1)
2017/09/14 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
Haggar官网:美国男装品牌
2020/02/16 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
趣味运动会广播稿
2014/09/13 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript