以下是用于测试指令的非常常见的通用场景:
var element,scope;
beforeEach(inject(function ($rootScope,$compile) {
scope = $rootScope.$new()
element = angular.element('<div my-directive></div>')
$compile(element)(scope)
scope.$digest(); //why?
}))
我明白$compile(element)
返回一个函数,该函数接受范围参数并将其提供给元素的指令。我也明白scope.$digest()
执行摘要循环并开始脏检查。话虽如此,我的问题是为什么你必须打电话给scope.$digest
打电话后$compile
在这种情况下一切正常?
这是用于测试指令的通用代码。$Compile
将模板与范围绑定并执行link
功能和$digest
/$apply
刷新可能已修改的模型的绑定link
.
你打电话时$compile
inside ng-click
处理程序或控制器函数中,整个执行过程在一个$digest
环形。 Angular 的构建方式是动态添加的项目(在执行此循环时)在同一周期中执行。这就是为什么您实际上没有注意到差异,也没有意识到编译后绑定评估的需要。然而,在单元测试中情况有所不同,您应该告诉 Angular 执行$digest
手动循环。这通常会导致测试时出现问题$q
例如,承诺。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)