angularjs – 为什么$rootScope.$new不让模板进入指令?

我正在使用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()将返回一个空字符串

有任何想法吗?

非常感谢
利奥尔

最佳答案 根据$digest(
http://docs.angularjs.org/api/ng. $rootScope.Scope)的文档,这只会处理当前范围及其子节点的观察者等.

这告诉我,当你设置scope = $rootScope然后$digest时,你将在$rootScope上处理观察者等,我认为这也是promises将被解决的地方,释放你的模板.当你执行scope = $rootScope.$new()并调用$digest时,我预计$rootScope中发生的任何事情都不会发生.

所以,如果你改变范围,这是否有效.$digest()到$rootScope.$digest()或范围.$apply()?

点赞