AngularJs覆盖templateUrl函数

时间:2016-11-08 18:35:10

标签: angularjs

因为每个部分模板都被缓存,我不想要这样做

.directive('myMessages', [ function () {
    return {
        restrict : 'E',
        templateUrl : 'wwwroot/base/messages/ui.partial.messages.show.html?v' + Date.now(),

是否可以全局覆盖templateUrl函数并在结尾添加日期?

我也从论坛中尝试了这两个解决方案,但它们从未被触发:

$rootScope.$on('$routeChangeStart', function(event, next, current) {
            $templateCache.remove(current.templateUrl);
        });

        $rootScope.$on('$viewContentLoaded', function() {
          $templateCache.removeAll();
       });

1 个答案:

答案 0 :(得分:1)

如果我没错,你试图在每一页的顶部使用你的指令作为横幅。

如果你可以说服你的后端给你一个JSON而不是部分HTML,那将是最好的,但我知道并不总是会发生这种情况。

我建议使用$http.get并将其加载到指令中,而不是使用templateUrl来实现这一点。

.directive('myMessages', [ function () {
    return {
        restrict : 'E',
        template : '<div></div>',
        link: function(scope, element, attrs){
            $http.get('wwwroot/base/messages/ui.partial.messages.show.html?v' + Date.now()).then(function(response.data) {
                // if your html contains angular syntax, use $compile
                element.html(response.data);
                $compile(element.contents())(scope);

                // if your html doesn't contain angular syntax, use $sce
                // your template needs to be <div ng-bind-html="message"></div>
                scope.message = $sce.trustAsHtml(response.data);
            });
        }
    }
]);