它是ng-repeat和ngInclude的错误吗?

时间:2015-12-01 01:43:53

标签: javascript angularjs

我正在尝试加载不同的模板,

<div ng-class="{active:$first,in:$first,'tab-pane':true}" id="{{p.path}}_settings" ng-repeat="p in panes" ng-include="buildPath(p.path)">
</div>

和控制器,

$scope.panes = [{
  name: 'xxx',
  path: 'alarm'
}, {
  name: 'yyy',
  path: 'scan'
}, {
  name: 'zzz',
  path: 'client'
}];

$scope.buildPath = function(path) {
  return 'templates/partials/settings_' + path + '.html';
}

完美无缺。但现在我想禁用缓存,所以我这样做了,

$scope.buildPath = function(path) {
  return 'templates/partials/settings_' + path + '.html?_=' + Date.now();
}

浏览器停在加载一堆重复的页面。

有什么想法吗?这是一个错误

1 个答案:

答案 0 :(得分:2)

您可以从缓存中移除前一个(在这种情况下为$templateCache),而不是生成新的模板网址。

就像注入$templateCache并使用remove函数清除以前的网址一样简单:

$scope.buildPath = function(path) {
  var url = 'templates/partials/settings_' + path + '.html';
  $templateCache.remove(url);
  return url;
}

或者,这是一个指令,您也可以使用:

装饰您的div
app.directive('no-cache', ['$templateCache', function($templateCache) {
    var directive = {
        restrict: 'A',
        scope: false,
        link: function(scope, element, attrs) {
            scope.$parent.$watch(attrs.ngInclude, function(new, old){
                $templateCache.remove(old);
            });
        }
    };
    return directive;
}]);