当前位置:  开发笔记 > 前端 > 正文

AngularJs ui-router重新加载模板

如何解决《AngularJsui-router重新加载模板》经验,为你挑选了1个好方法。

我有一个使用ui-router进行路由的angularjs项目.我正在使用$state.reload()重新加载当前状态并且它工作得很好,除了在我的开发系统中我希望$state.reload()还重新加载html模板以反映新的更改而无需重新加载整页.

有没有黑客或选择这样做?

更新:

Chris T的解决方案几乎可以工作,但我已经templateFactoryDecorator在模板URL中添加了缓存破坏程序.

function configureTemplateFactory($provide) {
    // Set a suffix outside the decorator function
    var cacheBuster = Date.now().toString();

    function templateFactoryDecorator($delegate) {
        var fromUrl       = angular.bind($delegate, $delegate.fromUrl);
        $delegate.fromUrl = function (url, params) {
            if (url !== null && angular.isDefined(url) && angular.isString(url)) {
                url += (url.indexOf("?") === -1 ? "?" : "&");
                url += "v=" + cacheBuster;
            }

            return fromUrl(url, params);
        };

        return $delegate;
    }

    $provide.decorator('$templateFactory', ['$delegate', templateFactoryDecorator]);
}

所以

$templateCache.remove($state.current.templateUrl);

没用,我不得不用

$templateCache.removeAll();

它不理想,但对于开发环境来说还可以.



1> Chris T..:

在内部,UI-Router 利用$ templateCache服务来避免重新获取模板.在调用之前$state.reload(),清除要从服务器重新提取的模板.

假设您想从控制器执行此操作:

function MyController($scope, $templateCache, $state) {
    $scope.reload = function() {
        $templateCache.remove("/path/to/template.html");
        $state.reload();
    }   
}

文档:

$ templateCache

$ cacheFactory

另外,我发现你想要从服务器重新获取模板很奇怪.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有