以下是用于测试指令的非常常见的通用方案:
var element,scope;
beforeEach(inject(function ($rootScope,$compile) {
scope = $rootScope.$new()
element = angular.element('<div my-directive></div>')
$compile(element)(scope)
scope.$digest(); //why?
}))
Run Code Online (Sandbox Code Playgroud)
我理解$compile(element)返回一个函数,该函数接受一个scope参数并将其提供给元素的指令.我也明白scope.$digest()执行摘要循环并开始脏检查.尽管如此,我的问题是为什么你必须打电话给scope.$digest后呼叫$compile才能使这一切都能正常工作?
这是用于测试指令的通用代码.$Compile将模板与范围绑定并执行link函数和$digest/ $apply刷新可能已被修改的模型的绑定link.
当您调用$compile内部ng-click处理程序或控制器函数时,整个执行将在$digest循环内运行.Angular以这样的方式构建,即动态添加的项(在执行此循环时)在同一循环中执行.这就是为什么你实际上没有注意到差异,并且没有意识到编译后需要绑定评估.然而,它在单元测试中有所不同,你应该告诉angular $digest手动执行一个循环.例如,这通常会在测试$q承诺时导致问题.
| 归档时间: |
|
| 查看次数: |
5685 次 |
| 最近记录: |