详解angularjs的数组传参方式的简单实现

  

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

  

今天闲来无事,有想到了这个问题。最简单的方法就是查看他的源代码。无奈本人E文不好,不说看他的设计逻辑,仅看英文注释就够我头疼了。尝试闭门造车,最终竟然把车造出来了。

  

既然自己造的车,就要带上自己的名(取姓名拼音第一个字母),就叫他mqyJs把,下面是演示的调用方法:

        var app2=mqyJs。applicationCreate([{名称:“直接传入范围”},你好美元,美元的世界,函数(范围,你好,美元全球美元){   返回$ scope.name +“:”+ hello.name + world.name美元;   }));   之前      

核心部分如下:

     //框架开设   var mqyJs={//服务注册   servicesList: {},   servicesRegister:函数(名称,值){   这一点。servicesList[名字]=价值;   },//应用创建   applicationList: [],   _args applicationCreate:函数(_opts) {   如果(! _args) {   _args=_opts;   _opts={}   }   _opts。=_opts范围。范围| | {   名称:“没范围有设置的   };   如果(!(_args instanceof数组)){   _args=[美元范围,_args];   }   如果(typeof _args [_args。长度- 1]!=昂?{   把新的错误(“参数中没有指定运行函数”);   }   _args。地图((参数、索引)=比;{   如果(typeof arg=='字符串'){   如果(arg===美元范围){   _args(指数)=_opts.scope;   其他}{   如果(! !参数,,在this.servicesList ! (arg)) {   把新的错误(“插件:“+参数+”还没有注册”);   }   _args(指数)=this.servicesList (arg);   }   }   });   返回this.applicationList [this.applicationList.push ({   运行:函数(回调){   如果(typeof调!=昂?{   回调函数=(_opts){返回_opts;}   }   回调(_args [_args返回。长度- 1)。应用(null, _args));   }   })- 1];   }   };//框架结束   之前      

通过servicesRegister,可以注册服务,比如angularjs的http美元;

     //插件开始   mqyJs。servicesRegister($你好,{   名称:“你好”   });   mqyJs。servicesRegister(“世界”美元,{   名称:“世界”   });   mqyJs。servicesRegister(“中国美元”,{   名称:“中国”   });//插件结束      

最终,对所有注册的应用,自动执行

     /* *   *初始化完成后系统自动运行   *比如网页中放到window   */mqyJs.applicationList。地图(函数(应用程序、索引){   控制台。日志(“自动调用→应用# +指数+”→' + app.run ());   });      

尝试跑一下代码,能自动识别参数类型,完美执行。

  

不传入美元范围时,程序会自动创建一个美元范围。

     //演示代码开始   应用var=mqyJs。美元applicationCreate(['美元范围”、“你好”、“中国美元”,函数(范围,你好,美元中国美元){   返回$ scope.name +“:”+ hello.name + china.name美元;   }));         var app2=mqyJs。applicationCreate([{名称:“直接传入范围”},你好美元,美元的世界,函数(范围,你好,美元全球美元){   返回$ scope.name +“:”+ hello.name + world.name美元;   }));            var app3=mqyJs。applicationCreate([{名称:“世界上也直接传入”},美元你好,{名称:“地球”},函数(范围,你好,美元全球美元){   返回$ scope.name +“:”+ hello.name + world.name美元;   }));         ($ var app4=mqyJs.applicationCreate(功能范围){   返回scope.name美元;   });      var选择={   范围:{   名称:“自定义范围”   }   };   var app5=mqyJs。applicationCreate(选择、功能范围($){   返回scope.name美元;   });      app4.run(函数(结果){   控制台。日志(“手动调用→结果→' +结果);   });//演示代码结束      之前      

为了方便测试,再把代码重新写一遍,直接复制下面的代码到浏览器控制台即可测试

     //框架开设   var mqyJs={//服务注册   servicesList: {},   servicesRegister:函数(名称,值){   这一点。servicesList[名字]=价值;   },//应用创建   applicationList: [],   _args applicationCreate:函数(_opts) {   如果(! _args) {   _args=_opts;   _opts={}   }   _opts。=_opts范围。范围| | {   名称:“没范围有设置的   };   如果(!(_args instanceof数组)){   _args=[美元范围,_args];   }   如果(typeof _args [_args。长度- 1]!=昂?{   把新的错误(“参数中没有指定运行函数”);   }   _args。地图((参数、索引)=比;{   如果(typeof arg=='字符串'){   如果(arg===美元范围){   _args(指数)=_opts.scope;   其他}{   如果(! !参数,,在this.servicesList ! (arg)) {   把新的错误(“插件:“+参数+”还没有注册”);   }   _args(指数)=this.servicesList (arg);   }   }   });   返回this.applicationList [this.applicationList.push ({   运行:函数(回调){   如果(typeof调!=昂?{   回调函数=(_opts){返回_opts;}   }   回调(_args [_args返回。长度- 1)。应用(null, _args));   }   })- 1];   }   };//框架结束//插件开始   mqyJs。servicesRegister($你好,{   名称:“你好”   });   mqyJs。servicesRegister(“世界”美元,{   名称:“世界”   });   mqyJs。servicesRegister(“中国美元”,{   名称:“中国”   });      应用var=mqyJs。美元applicationCreate(['美元范围”、“你好”、“中国美元”,函数(范围,你好,美元中国美元){   返回$ scope.name +“:”+ hello.name + china.name美元;   }));         var app2=mqyJs。applicationCreate([{名称:“直接传入范围”},你好美元,美元的世界,函数(范围,你好,美元全球美元){   返回$ scope.name +“:”+ hello.name + world.name美元;   }));         var app3=mqyJs。applicationCreate([{名称:“世界上也直接传入”},美元你好,{名称:“地球”},函数(范围,你好,美元全球美元){   返回$ scope.name +“:”+ hello.name + world.name美元;   }));         ($ var app4=mqyJs.applicationCreate(功能范围){   返回scope.name美元;   });      var选择={   范围:{   名称:“自定义范围”   }   };   var app5=mqyJs。applicationCreate(选择、功能范围($){   返回scope.name美元;   });      app4.run(函数(结果){   控制台。日志(“手动调用→结果→' +结果);   });//插件结束   mqyJs.applicationList。地图(函数(应用程序、索引){   控制台。日志(“自动调用→应用# +指数+”→' + app.run ());   });      

详解angularjs的数组传参方式的简单实现