为什么$ rootScope。$ new不让模板进入指令?

时间:2013-06-19 20:59:42

标签: angularjs angularjs-directive mocha karma-runner

我正在使用Karma和Mocha构建单元测试。测试我的指令,并使用html2js(它将htmls转换为$ templateCache中的缓存字符串)。 有趣的是,在我的测试中使用$ rootScope。$ new()时,模板html将不会进入指令。这是代码:

it('should show a thumb name', function() {
  inject(function($compile, $rootScope,$controller) {

  var scope = $rootScope;//.$new() ($new not working. Why?)
  var linkFn = $compile('<thumb></thumb>');
  var element = linkFn(scope);
  scope.$digest(); // <== needed so that $templateCache will bring the html 
                     //     (that html2js put in it)     
  console.log(element.html());// correctly returns thumb's directive templateUrl content
}));

...

但是,如果我使用scope = $ rootScope。$ new(),element.html()将返回一个空字符串

任何想法?

非常感谢 利奥尔

1 个答案:

答案 0 :(得分:2)

根据$digesthttp://docs.angularjs.org/api/ng。$ rootScope.Scope)的文档,这只会处理当前范围及其子级的观察者等。

这向我建议,当您设置scope = $rootScope然后$digest时,您将处理$rootScope上的观察者等,我认为这也是承诺将被解决的地方,释放您的模板。当您执行scope = $rootScope.$new()并致电$digest时,我预计$rootScope发生的任何事情都不会发生。

那么,如果您将scope.$digest()更改为$rootScope.$digest()scope.$apply(),这会有效吗?