初学 angularjs时,对 数组传参方式感到很好奇([‘a', ‘b', function(a,b){}]),它到底怎么实现的呢?后来由于工作很忙,对这个问题也就慢慢忘记了。

今天闲来无事,有想到了这个问题。最简单的方法就是查看他的源代码。无奈本人E文不好,不说看他的设计逻辑,仅看英文注释就够我头疼了。尝试闭门造车,最终竟然把车造出来了。
既然自己造的车,就要带上自己的名(取姓名拼音第一个字母),就叫他mqyJs把,下面是演示的调用方法:
var app2 = mqyJs.applicationCreate([{ name: '直接传入SCOPE' }, '$hello', '$world', function($scope, $hello, $world) {
return $scope.name + ": " + $hello.name + $world.name;
}]);
核心部分如下:
//框架开设
var mqyJs = {
//服务注册
servicesList: {},
servicesRegister: function(name, value) {
this.servicesList[name] = value;
},
//应用创建
applicationList: [],
applicationCreate: function(_opts, _args) {
if (!_args) {
_args = _opts;
_opts = {}
}
_opts.scope = _opts.scope || {
name: 'SCOPE没有设置'
};
if (!(_args instanceof Array)) {
_args = ['$scope', _args];
}
if (typeof _args[_args.length - 1] != 'function') {
throw new Error('参数中没有指定运行函数');
}
_args.map((arg, index) => {
if (typeof arg == 'string') {
if (arg === '$scope') {
_args[index] = _opts.scope;
} else {
if (!!arg && !(arg in this.servicesList)) {
throw new Error('插件:' + arg + ' 还没有注册');
}
_args[index] = this.servicesList[arg];
}
}
});
return this.applicationList[this.applicationList.push({
run: function(callback) {
if (typeof callback != 'function') {
callback = function(_opts) { return _opts; }
}
return callback(_args[_args.length - 1].apply(null, _args));
}
}) - 1];
}
};
//框架结束
通过 servicesRegister,可以注册 服务,比如 angularjs 的 $http;
//插件开始
mqyJs.servicesRegister('$hello', {
name: '你好'
});
mqyJs.servicesRegister('$world', {
name: '世界'
});
mqyJs.servicesRegister('$china', {
name: '中国'
});
//插件结束
最终,对所有注册的应用,自动执行
/**
* 初始化完成后系统自动运行
* 比如网页中 放到 window.onload
*/
mqyJs.applicationList.map(function(app, index) {
console.log('自动调用 -> APP #' + index + ' -> ' + app.run());
});
尝试跑一下代码,能自动识别参数类型,完美执行。
不传入 $scope 时,程序会自动创建一个 $scope。
//演示代码 开始
var app = mqyJs.applicationCreate(['$scope', '$hello', '$china', function($scope, $hello, $china) {
return $scope.name + ": " + $hello.name + $china.name;
}]);
var app2 = mqyJs.applicationCreate([{ name: '直接传入SCOPE' }, '$hello', '$world', function($scope, $hello, $world) {
return $scope.name + ": " + $hello.name + $world.name;
}]);
var app3 = mqyJs.applicationCreate([{ name: 'world也直接传入' }, '$hello', { name: '地球' }, function($scope, $hello, $world) {
return $scope.name + ": " + $hello.name + $world.name;
}]);
var app4 = mqyJs.applicationCreate(function($scope) {
return $scope.name;
});
var opts = {
scope: {
name: '自定义SCOPE'
}
};
var app5 = mqyJs.applicationCreate(opts, function($scope) {
return $scope.name;
});
app4.run(function(result) {
console.log('手动调用 -> RESULT -> ' + result);
});
//演示代码 结束
为了方便测试,再把代码重新写一遍,直接复制下面的代码到 浏览器控制台即可测试
//框架开设
var mqyJs = {
//服务注册
servicesList: {},
servicesRegister: function(name, value) {
this.servicesList[name] = value;
},
//应用创建
applicationList: [],
applicationCreate: function(_opts, _args) {
if (!_args) {
_args = _opts;
_opts = {}
}
_opts.scope = _opts.scope || {
name: 'SCOPE没有设置'
};
if (!(_args instanceof Array)) {
_args = ['$scope', _args];
}
if (typeof _args[_args.length - 1] != 'function') {
throw new Error('参数中没有指定运行函数');
}
_args.map((arg, index) => {
if (typeof arg == 'string') {
if (arg === '$scope') {
_args[index] = _opts.scope;
} else {
if (!!arg && !(arg in this.servicesList)) {
throw new Error('插件:' + arg + ' 还没有注册');
}
_args[index] = this.servicesList[arg];
}
}
});
return this.applicationList[this.applicationList.push({
run: function(callback) {
if (typeof callback != 'function') {
callback = function(_opts) { return _opts; }
}
return callback(_args[_args.length - 1].apply(null, _args));
}
}) - 1];
}
};
//框架结束
//插件开始
mqyJs.servicesRegister('$hello', {
name: '你好'
});
mqyJs.servicesRegister('$world', {
name: '世界'
});
mqyJs.servicesRegister('$china', {
name: '中国'
});
var app = mqyJs.applicationCreate(['$scope', '$hello', '$china', function($scope, $hello, $china) {
return $scope.name + ": " + $hello.name + $china.name;
}]);
var app2 = mqyJs.applicationCreate([{ name: '直接传入SCOPE' }, '$hello', '$world', function($scope, $hello, $world) {
return $scope.name + ": " + $hello.name + $world.name;
}]);
var app3 = mqyJs.applicationCreate([{ name: 'world也直接传入' }, '$hello', { name: '地球' }, function($scope, $hello, $world) {
return $scope.name + ": " + $hello.name + $world.name;
}]);
var app4 = mqyJs.applicationCreate(function($scope) {
return $scope.name;
});
var opts = {
scope: {
name: '自定义SCOPE'
}
};
var app5 = mqyJs.applicationCreate(opts, function($scope) {
return $scope.name;
});
app4.run(function(result) {
console.log('手动调用 -> RESULT -> ' + result);
});
//插件结束
mqyJs.applicationList.map(function(app, index) {
console.log('自动调用 -> APP #' + index + ' -> ' + app.run());
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angularjs
# 数组传参
# 传数组参数
# 传递数组
# AngularJS ng-repeat数组有重复值的解决方法
# AngularJS中比较两个数组是否相同
# AngularJS下对数组的对比分析
# angularJS利用ng-repeat遍历二维数组的实例代码
# mongoDB 多重数组查询(AngularJS绑定显示 nodejs)
# Angular ng-repeat 对象和数组遍历实例
# angular ng-repeat数组中的数组实例
# Angular.js中数组操作的方法教程
# Angular.js前台传list数组由后台spring MVC接收数组示例代码
# AngularJS遍历获取数组元素的方法示例
# 还没有
# 这个问题
# 自定义
# 中国
# 自己的
# 你好
# 地球
# 无事
# 第一个
# 也就
# 闭门造车
# 一遍
# 自动识别
# 英文
# 看他
# 叫他
# 最简单
# 再把
# 创建一个
# 很忙
相关文章:
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
济南网站制作的价格,历城一职专官方网站?
Swift开发中switch语句值绑定模式
Python lxml的etree和ElementTree有什么区别
孙琪峥织梦建站教程如何优化数据库安全?
海南网站制作公司有哪些,海口网是哪家的?
python的本地网站制作,如何创建本地站点?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何通过智能用户系统一键生成高效建站方案?
家庭服务器如何搭建个人网站?
宝塔Windows建站如何避免显示默认IIS页面?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何在腾讯云免费申请建站?
建站主机是否等同于虚拟主机?
如何用美橙互联一键搭建多站合一网站?
如何在新浪SAE免费搭建个人博客?
为什么Go需要go mod文件_Go go mod文件作用说明
重庆网站制作公司哪家好,重庆中考招生办官方网站?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
建站主机选哪种环境更利于SEO优化?
h5在线制作网站电脑版下载,h5网页制作软件?
如何制作网站标识牌,动态网站如何制作(教程)?
如何通过VPS搭建网站快速盈利?
如何在阿里云高效完成企业建站全流程?
微信小程序 input输入框控件详解及实例(多种示例)
如何快速搭建支持数据库操作的智能建站平台?
html制作网站的步骤有哪些,iapp如何添加网页?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
香港服务器WordPress建站指南:SEO优化与高效部署策略
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
建站之星展会模板:智能建站与自助搭建高效解决方案
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
建站之星如何修改网站生成路径?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站主机服务器选型指南与性能优化方案解析
建站之星IIS配置教程:代码生成技巧与站点搭建指南
简单实现Android文件上传
如何在万网自助建站平台快速创建网站?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
长沙企业网站制作哪家好,长沙水业集团官方网站?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何在IIS7中新建站点?详细步骤解析
如何构建满足综合性能需求的优质建站方案?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
湖北网站制作公司有哪些,湖北清能集团官网?
c# await 一个已经完成的Task会发生什么
制作网站的软件免费下载,免费制作app哪个平台好?
*请认真填写需求信息,我们会在24小时内与您取得联系。