2016-12-16 63 views
1

我遇到了一个非常令人沮丧的问题,我无法弄清楚,而且我自己也不知道足以进行调试。ng-repeat不会呈现(除非任何范围变量发生变化)

基本上,我有一个非常简单的指令,打印出“1,2,3”采用NG-重复:

myApp.directive('foo', ['$compile', function($compile) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attrs) { 
       var template = '<ul><li ng-repeat="node in [1,2,3]">{{node}}</li></ul>'; 

       //Render template 
       angular.element(document).ready(function() { 
       element.html('').append($compile(template)(scope)); 
       }); 
     } 
    } 
}]); 

该指令几乎所有的情况在工作,刷新页面到UI时除外路线状态。如果我转换到包含来自另一个状态的指令的状态,但它不起作用,而不是简单地将页面加载到该状态。

这是奇怪的事情。它会奇迹般地开始工作,如果我只是修改任何范围变量(无所谓的哪一个)。这是我创建的小提琴演示问题。

http://jsfiddle.net/789Ks/247/

这是UI路由器的错误?我只是不理解什么?

回答

2

尝试附加模板后运行scope.$apply

angular.element(document).ready(function() { 
    element.html('').append($compile(template)(scope)); 
    scope.$apply(); 
}); 
+0

这工作......但是为什么呢?有时我讨厌角的范围内部 – RPGillespie

+0

,因为你暂时离开了角度世界。您需要'$ apply'将更改传播到Angular – Ladmerc

+0

@Ladmerc,这并不能解释为什么它在状态转换时起作用,但不能在页面载入时起作用 – RPGillespie