2

我已经研究这个问题几个小时了,最后我在 plunker 上复制了它

这是我的问题:

当使用外部资源作为模板的自定义指令与 ng-repeat 结合使用时,模型更改时视图无法正确呈现。

在我的示例中,单击链接将替换模型,但尚未清理旧数据。

如果我使用template: 'stringTemplate'而不是templateUrl: 'urlToTemplate',它就可以正常工作。还是不知道是bug还是什么...

部分代码:

angular.module('test', [])
    .run(function($rootScope) {
        $rootScope.topics = [{
            content: 'Click here to change reply',
            replys: [{
                content: 'Reply test...',
            }]
        }];
    })
    .directive('topic', function() {
        return {
            replace: true,
            restrict: 'E',
            templateUrl: 'topic.htm',
            link: function(scope) {
                scope.reply = function(input) {
                    scope.topic.replys = [{ content: '"Reply test..." should be replaced, but it\'s not!' }];
                }
            }
        };
    })
    .directive('reply', function() {
        return {
            replace: true,
            restrict: 'E',
            // template: '<div><div ng-bind="reply.content"></div></div>' //this works fine
            templateUrl: 'reply.htm' // same content
        };
    });
4

1 回答 1

1

我做了一些研究,看来您并不孤单:

https://github.com/angular/angular.js/issues/2151

用户 ishw 提到,作为快速修复:

“对于那些可能还没有意识到的人:这是因为您的 ng-repeat 位于指令模板中的根元素上。将您的 ng-repeat 包装在任何元素中都可以。”

我用你的 plunkr 试过这个,它似乎正在工作

  <div> 
      <div class="topic" ng-bind="topic.content" ng-click="reply()"></div>
      <div ng-repeat="reply in topic.replys"><reply></reply></div>
  </div>
于 2013-10-04T10:00:47.540 回答