javascript - Angular : dynamic stylesheet link tag fires request too soon

标签 javascript css angularjs

我面临的问题与 Conditionally-rendering css in html head 中描述的问题类似(但不完全相同,请耐心等待)

我还“懒惰地”加载样式表,从我在 Controller 最开始初始化的范围变量中获取文件名:

<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 范围变量提供了一个值,但正如我所说,这是在我的 Controller 中完成的第一件事:

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

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

我正在使用 Angular 1.1.5;我能做些什么吗?这没什么大不了的,但如果我能解决它,那就更好了。

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

索引.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>

应用程序.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';
    }]);

(是的,我试过像这个一样的空 Controller ,同样的问题。)

最佳答案

我通过向 link 标记添加一个 ngIf 指令来解决它,因此它不会呈现直到 filename 不是假的。我知道有点脏,但它确实有效!

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

关于javascript - Angular : dynamic stylesheet link tag fires request too soon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514430/

相关文章:

javascript - 如何在按下手机后退按钮时关闭 ionic 弹出窗口

javascript - 脚本在 JSFiddle 上运行良好,但在其他地方运行失败

c# - 无法使用 Javascript 折叠 div

javascript - 如何使用jquery获取json所有标签的类名

html - 如何从表格的悬停中排除悬停的 td?

angularjs - NodeJS 和 Angular 图片上传

javascript - Google 电子表格侧边栏中的表单处理和验证

javascript - 在 .js var 中应用 CSS 样式

html - 网站主要内容旁边的不需要的空间

asp.net-mvc - 如何使用 ASP.Net MVC5 和 OWIN 返回 StatusCode 401