AngularJS:动态样式表链接标记触发请求的时间过早

em

我遇到的问题与html head中的有条件渲染css中描述的问题类似(但不完全相同,请忍受)

我也“懒洋洋地”加载样式表,从我在控制器的一开始就初始化的范围变量中获取文件名:

<link rel="stylesheet" data-ng-href="css/{{ filename }}.css" />

在使用时ng-href(此处以其data-形式),我确实在避免不必要的请求,例如:

http://localhost/css/%7B%7B%20filename%7D%7D.css

但这一切仍然为时过早,而我几乎每次都会得到:

http://localhost/css/.css

这似乎意味着该请求在Angular删除其自己的标记的那一刻和以正确的值替换它的那一刻之间触发(此行为会在稍后执行,然后正确加载我的样式表)之间触发我认为这根本不可能...!?

我以为可能filename为时过晚scope变量提供了一个值,但是正如我所说的,这是在控制器中完成的第一件事:

angular.module('myControllers', [])
    .controller('TestCtrl', ['$scope', function($scope) {
        $scope.filename = 'test';

        // some more code...
    }]);

我正在使用Angular 1.1.5; 有什么我可以做的吗?没什么大不了的,但是如果我能解决的话,还是会更好。

编辑:这里是完整的代码,根据要求。我不会包括页面模板,因为它们与该问题无关。

index.html:

<!DOCTYPE html>
<html lang="en" data-ng-app="myapp">

<head>
    <meta charset="utf-8" />
    <title>My App</title>
    <link rel="stylesheet" data-ng-href="/assets/css/{{ filename }}.css" />
</head>

<body>
    <div id="app" class="app" style="display: none;" data-ng-view></div>

    <script src="/assets/js/lib/angular/angular.min.js"></script>
    <script src="/assets/js/app/app.js"></script>
    <script src="/assets/js/app/controllers.js"></script>
</body>

</html>

app.js:

var app = angular.module('myapp', ['myControllers'])
    .config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
        $locationProvider.hashPrefix('!');
        $routeProvider

        .when('/', {
            templateUrl: 'path/to/my/template.html',
            controller: 'TestCtrl'
        })

        .otherwise({ redirectTo: '/' });
    }]);

app.run();

controllers.js:

angular.module('myControllers', [])
    .controller('TestCtrl', ['$scope', '$rootScope', function($scope, $rootScope) {
        $rootScope.filename = 'stylesheet';
    }]);

(是的,我尝试过使用一个空的控制器,就像这个一样,同样的问题。)

em

我通过ngIflink标签中添加指令来解决了该问题,因此直到filename伪造之前,它才被渲染我知道有点脏,但实际上可以!

<link rel="stylesheet" data-ng-if="filename" data-ng-href="css/{{ filename }}.css" />

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章