angular的注入实现,angular injector

angular的注入实现        angular需要对用户的传入函数进行静态分析,抽取当中的依赖,才能工作。因此用户的函数,包括控制器函数,工厂函数,服务函数与$w

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

Like (0)
CSDN的头像CSDN
Previous 2024年6月26日
Next 2024年6月26日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注