Angular 必须静态分析用户传入的函数并提取依赖关系,然后才能运行。因此,控制器函数、工厂函数、服务函数、$watch回调等用户函数都只是用来获取toString的模板,实际执行的是编译后的动态函数,参数必须传递给任何函数。例如:
函数TestCtrl($scope){
$scope.name=\’xxx\’
}
$scope 是一个非常复杂的类的实例。 Angular 中有很多类。我怎样才能用这个类的实例来代替其他类?例如,$scope 必须是范围对象,$timeout 必须是计时器。在Angular 中,这称为依赖注入,而这种最简单的注入称为推理注入。实现非常简单:获取toString,删除函数名,删除函数体,删除参数名之间的注释和逗号,剩下的就是一个字符串数组。然而,这不耐压缩。所以还有两次注入:
不用说,标签注入:添加了一个名为$inject的属性,它对应于字符串数组、控制器函数等。然后Angular 在获取toString 进行推理注入之前执行标记注入。
函数TestCtrl(vm, 超时) {
vm.friends=[{姓名: \’约翰\’,年龄: 25},{姓名: \’玛丽\’,年龄: 28},{姓名: \’娜萨米\’,年龄: 30}
超时(函数(){
vm.friends.push({name: \’添加\’,age: 10})
}, 1000)
}
TestCtrl.$inject=[\’$scope\’, \’$timeout\’]
内联注入: 当使用模块实例工厂、指令、过滤器或控制器方法时,该数组的最后一个元素是函数,其他元素允许是服务名称。经过。这使得框架更方便地提取依赖项,但传递参数对于用户来说太奇怪了。
angular.module(\’myModule\’, [], function($provide) {
$provide.factory(\’notify\’, [\’$window\’, function(win) {
var 消息=[];
返回函数(消息){
消息推送(消息);
if (msgs.length==3) {
win.alert(msgs.join(\’\\n\’));
消息=[];
}
};
}]);
});
#以上关于实现角度注入的相关内容来自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92325.html