2015-04-01 82 views
1

我在我的Angular应用程序中使用递归脚本来输出一堆对象的表示形式。有没有办法在AngularJS中强制重新加载递归ng-include?

问题是,如果我动态改变对象的结构,视图不会更新。看来ng-include不会再生。

有没有办法强制ng-include在一个视图中重新从头开始工作?

+0

如果要从外部角度更改对象,则可能需要使用$ timeout或$ apply显式触发摘要循环。你尝试过吗? – doldt 2015-04-01 07:54:24

+0

是的,但得到'$ apply()'已经在运行的错误。看起来'$ apply'不会触发'ng-include'来重新运行递归脚本 – CodyBugstein 2015-04-01 08:03:46

+0

一些简单的小提琴会有所帮助。 – 2015-04-01 09:47:50

回答

1

我有同样的问题。试试ui-if指令,它解决了我的问题。

app.directive("uiIf", function() { 
       return { 
        transclude: 'element', 
        priority: 1000, 
        terminal: true, 
        restrict: 'A', 
        compile: function (element, attr, linker) { 
         return function (scope, iterStartElement, attr) { 
          iterStartElement[0].doNotMove = true; 
          var expression = attr.uiIf; 
          var lastElement; 
          var lastScope; 
          scope.$watch(expression, function (newValue) { 
           if (lastElement) { 
            lastElement.remove(); 
            lastElement = null; 
           } 
           if (lastScope) { 
            lastScope.$destroy(); 
            lastScope = null; 
           } 
           if (newValue) { 
            lastScope = scope.$new(); 
            linker(lastScope, function (clone) { 
             lastElement = clone; 
             iterStartElement.after(clone); 
            }); 
           } 
           iterStartElement.parent().trigger("$childrenChanged"); 
          }); 
         }; 
        } 
       }; 
      }); 

当值设置为false时,元素将消失。如果真的,它会再次呈现。

+0

有趣的是,我很快就会尝试一下 – CodyBugstein 2015-05-06 15:00:16

相关问题