【发布时间】:2013-08-31 16:51:46
【问题描述】:
我只想在用户访问我的 AngularJS 应用程序/网站上的 contact.html 视图时加载特定的 CSS 文件。我发现这个答案对我来说几乎是有意义的How to include view/partial specific styling in AngularJS charlietfl 接受的答案是:
可以在
$routeProvider的头部附加一个新样式表。为了 使用字符串很简单,但也可以创建新的链接元素, 或为样式表创建服务/* check if already exists first - note ID used on link element*/ /* could also track within scope object*/ if( !angular.element('link#myViewName').length){ angular.element('head').append('<link id="myViewName" href="myViewName.css" rel="stylesheet">'); }在页面中预加载的最大好处是任何背景图片都会 已经存在,并且
FOUC的可能性较小
问题是我不知道在我的$routeProvider 中的确切位置添加代码。 charlietfl 在评论中提到了将其放在何处,内容为
如果没有调用路由的时间,则不会。可以把这段代码放进去 在 routeProvider 内的控制器回调,或者可能 在可能更早触发的解析回调中
我已按照建议修改了我的$routeProvider。我在.when('/contact' 之后的对象中添加了resolve。这是我的代码
angular.module('maxmythicApp', ['ngResponsiveImages'])
.config(function ($locationProvider, $routeProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix = '!';
$routeProvider
.when('/', {
templateUrl: '/views/design.html',
controller: 'MainCtrl'
})
.when('/design', {
templateUrl: '/views/design.html',
controller: 'MainCtrl'
})
.when('/about', {
templateUrl: '/views/about.html',
controller: 'MainCtrl'
})
.when('/contact', {
templateUrl: '/views/contact.html',
controller: 'MainCtrl',
resolve:
if( !angular.element('link#myViewName').length){
angular.element('head').append('<link id="myViewName" href="myViewName.css" rel="stylesheet">');
}
})
.otherwise({
redirectTo: '/'
});
});
这行得通吗?
【问题讨论】:
-
你必须使用 `$compile' 让 Angular 知道你必须向 dom 添加一些东西。这应该会自动调用 $scope.$apply(),而后者又会调用 $$digest。这应该可以解决问题。
-
我应该把
$compile放在哪里?
标签: css angularjs conditional route-provider