javascript - 带有动态模板的 Angularjs 加载屏幕

标签 javascript angularjs

所以我有一个接受模板名称的指令,该模板名称可以动态加载正确的模板。 它看起来像这样:

angular.module('widget.directives').directive('pkSplash', directive);

function directive() {
    return {
        restrict: 'A',
        controller: 'PkSplashController',
        controllerAs: 'controller',
        bindToController: true,
        template: '<div ng-include="contentUrl"></div>',
        link: lnkFn
    };

    function lnkFn(scope, element, attrs, controller) {
        scope.contentUrl = 'app/directives/pkSplash-' + attrs.pkSplash + '.html';
        attrs.$observe('template', function (template) {
            scope.contentUrl = 'app/directives/pkSplash-' + template + '.html';
        });
        scope.$watch(controller.loading, function (loading) {
            controller.loaded = !loading;
        });
    };
};

该指令实际上位于 index.html 页面上,如下所示:

<div pk-splash="{{ loaderTemplate }}" ng-if="loaderTemplate"></div>

当状态更改开始时,loaderTemplate 会在 $rootScope 上设置,如下所示:

function run($rootScope, pkSplashService) {
    $rootScope.$on('$stateChangeStart', function (event, toState) {
        $rootScope.loaderTemplate = pkSplashService.getTemplate(toState.name);
        console.log($rootScope.loaderTemplate);
    });
};

我已将控制台日志放在 $stateChangeStart 方法上,我可以看到,在交换状态时,模板名称确实发生了变化,但加载器将仅使用首次加载的模板。 有谁知道我怎样才能改变它?

最佳答案

在这一部分中,您似乎正在观察一个名为“template”的属性,但您没有传递一个属性:

    attrs.$observe('template', function (template) {
        scope.contentUrl = 'app/directives/pkSplash-' + template + '.html';
    });

在这种情况下,您需要像这样使用它:

<div pk-splash template="{{ loaderTemplate }}" ng-if="loaderTemplate"></div>

另一个选择是观察 pkSplash 属性:

 attrs.$observe('pkSplash', function (template) {
     scope.contentUrl = 'app/directives/pkSplash-' + template + '.html';
 });

关于javascript - 带有动态模板的 Angularjs 加载屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45161805/

相关文章:

javascript - 用于 mouseenter 和 mouseleave 的 AngularJS 自定义指令

javascript - Angular 部分不会将编辑传播到应用程序

javascript - JSON jQuery 数据变量

javascript - 每 5 秒在后台检查一次远程图像

javascript - 通过 CSS 更改 JQuery Mobile 的字体和颜色

AngularJS $http 在多个 Controller 中使用响应

javascript - 强制页面内容为视口(viewport)的 100%

javascript - 如何从 HTML 文本中生成 DOM 对象

javascript - 发生状态更改时不应用 ng-class

javascript - 如何缩小3个循环或查询mysql