1.依赖注入
原理:通过构造函数的参数名称来推断依赖服务名称的,通过toString来找到这个function对应的字符串,然后用正则匹配出其中的参数项(依赖项),再去依赖映射表中取出对应的依赖,实例化之后传入函数。
原理的代码表示过程请参考:http://www.tuicool.com/articles/ymmq2mf
inject.register('el', animalBox); //注册依赖名称和依赖项inject.register('ajax', httpRequest);render = inject.resolve(render); //向函数添加依赖注入 injector render();
问题:injector假设参数的名字就是依赖的名字,然后去查找依赖项,但是如果对代码进行了压缩,参数会被重命名,就无法查找到依赖项。
所以使用下面两种方式注入依赖是安全的:
数组注释法:
myApp.controller('myCtrl', ['$scope', '$http', function($scope, $http){ ... }]); 显式 $inject,调用$inject属性,
myApp.controller('myCtrl', myCtrl);function myCtrl = ($scope, $http){ ... } myCtrl.$inject = ['$scope', '$http'];